You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用readr读取极小科学计数法数值并保留原始精度

问题原因

你遇到的问题本质是R默认双精度浮点型的存储限制:双精度浮点数可表示的最小正有限值约为2.2e-308,所有小于该阈值的数值都会被自动下溢为接近该阈值的近似值,和readr工具本身无关。

可行解决方案

方案1:将P值列读取为字符串保留原始值

如果后续只需要展示、匹配原始P值文本,不需要做数值运算,直接在读入时指定P值列为字符型即可:

infile <- "~/Desktop/test.csv"
# 把第二列的类型从d(双精度)改成c(字符)
dat <- readr::read_delim(infile, delim = "\t", col_types = "cc")  

这种方式会完全保留文件里的原始数值文本,不会出现精度损失。

方案2:使用任意精度数值类型存储

如果后续需要对极小P值做数值计算,可以读取为字符后转成高精度数值类型,借助Rmpfr包即可实现:

# 先安装加载包
install.packages("Rmpfr")
library(Rmpfr)

infile <- "~/Desktop/test.csv"
# 先读为字符
dat <- readr::read_delim(infile, delim = "\t", col_types = "cc") 
# 转成1024位精度的数值,足够存储极小P值
dat$`P-value` <- mpfr(dat$`P-value`, precBits = 1024)

转换后可以正常做数值比较、对数转换等运算,不会出现下溢问题。

内容的提问来源于stack exchange,提问作者littleworth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:54:03