r - 在 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
我需要进一步下游分析的确切值。有没有办法读取文件中的值?
非常感激!谢谢
解决方案
您是如何创建 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
推荐阅读
- asp.net-core - 从创建方法背后的代码触发甜蜜警报消息
- ruby-on-rails-5 - 如果我使用 wicked_pdf gem,Rails 和 Ruby 应用程序在启动后会崩溃
- r - 有条件地从数据框列表中删除数据框
- sql - SQL 语法 - 除法和上限函数
- c# - 如何在 C# 中获取此 JSON 值?
- arrays - 如何使用 Ramda 在我的减速器中更改对象数组中的数组?
- mongodb - 如何使用 $mergeObjects 合并现有组对应的数组?
- python - 如何标准化 [0,1] 范围之间的浮点数?
- php - php中的array_filter和映射有更好的选择吗?
- python - 使用 DRF 中的直通表反序列化多对多字段