首页 > 解决方案 > 在 R 中读取一个非常小的 p 值

问题描述

我正在使用 R,但在计算某些基因的大 z 分数的 p 值时遇到了问题。我使用 Rmpfr 包使用以下代码使其工作(感谢这个论坛)

2*Rmpfr::pnorm(mpfr(abs(38.77589104), precBits=100), lower.tail=FALSE, log.p = FALSE)
6.5625457492544973317295147124225e-329

我将上述值输入为 6.56E-329。现在,问题是当我尝试读取包含所有 p 值的文件时,它再次将上述值读取为 0。

pval <- file$pvalue
pval[1]
[1] 0
pval[1] <- 6.56E-329
pval[1]
[1] 0

我需要进一步下游分析的确切值。有没有办法读取文件中的值?

非常感激!谢谢

标签: rp-value

解决方案


您是如何创建 p 值文件的?除非您使用save()load()在保存它们时剥夺了精度:

library(Rmpfr)
pval <- 2*Rmpfr::pnorm(mpfr(abs(38.77589104), precBits=100), lower.tail=FALSE, log.p = FALSE)
pval
# 1 'mpfr' number of precision  100   bits 
# [1] 6.5625457492544973317295147124225e-329
save(pval, file="Test.RData")
rm(pval)
pval
# Error: object 'pval' not found
load("Test.RData")
pval
# 1 'mpfr' number of precision  100   bits 
# [1] 6.5625457492544973317295147124225e-329

您可以将扩展精度值导入为字符串mpfr并将它们转换:

example <- c("1.4142135623730951454746218587388", "1.7320508075688771931766041234368", 
"2.2360679774997898050514777423814", "2.6457513110645907161710965738166", 
"3.3166247903553998099823729717173")
mpfr(example)
# 5 'mpfr' numbers of precision  107   bits 
# [1] 1.414213562373095145474621858738804 1.732050807568877193176604123436797 2.236067977499789805051477742381394
# [4] 2.645751311064590716171096573816588 3.316624790355399809982372971717293
mpfr(example)^2
# 5 'mpfr' numbers of precision  107   bits 
# [1] 2.000000000000000273432346306476854 2.999999999999999652374485391952952 5.000000000000000485863154281767975
# [4] 7.000000000000000664980387281581168 10.99999999999999974042396434698263

推荐阅读