如何在 R 中只打印 4 位而不是科学记数法的 p 值?

Posted

技术标签:

【中文标题】如何在 R 中只打印 4 位而不是科学记数法的 p 值?【英文标题】:How to do the p-value to print only 4 digits instead of the scientific notation in R? 【发布时间】:2011-10-19 19:07:21 【问题描述】:

我尝试使用选项(数字 = 3,scipen = 12),但它没有用...... 这是一个例子...

>options(digits=3, scipen=12) 
>Oi <- c(A=321, B=712, C=44) 
>Ei <- c(A=203, B=28, C=6) 
>chisq.test(Oi, p=Ei,rescale.p=T)"

【问题讨论】:

【参考方案1】:

不太清楚你想要什么。 感谢您提供可重现的示例:输出是

cc <- chisq.test(Oi,p=Ei,rescale.p=TRUE)

print(cc)
    Chi-squared test for given probabilities

data:  Oi 
X-squared = 3090, df = 2, p-value < 0.00000000000000022

检查对象的结构表明,在这种情况下,p 值已下溢为零:

List of 9
 $ statistic: Named num 3090
  ..- attr(*, "names")= chr "X-squared"
 $ parameter: Named num 2
  ..- attr(*, "names")= chr "df"
 $ p.value  : num 0
 $ method   : chr "Chi-squared test for given probabilities"
 $ data.name: chr "Oi"
 $ observed : Named num [1:3] 321 712 44
  ..- attr(*, "names")= chr [1:3] "A" "B" "C"
 $ expected : Named num [1:3] 922.5 127.2 27.3
  ..- attr(*, "names")= chr [1:3] "A" "B" "C"
 $ residuals: Named num [1:3] -19.8 51.8 3.2
  ..- attr(*, "names")= chr [1:3] "A" "B" "C"
 $ stdres   : Named num [1:3] -52.29 55.2 3.25
  ..- attr(*, "names")= chr [1:3] "A" "B" "C"
 - attr(*, "class")= chr "htest"

我认为,如果您想从该测试中获得确切的 p 值,您必须采取一些措施:

(pval <- pchisq(3090,2,lower.tail=FALSE,log.p=TRUE))
[1] -1545

所以这大约是 10^pval/log(10) = 10^(-671) [R 的最小可表示值通常在 1e-308 左右,参见 .Machine$double.xmin]

【讨论】:

【参考方案2】:

我也不确定你想要什么,但我猜你正在寻找类似 format.pval 函数,或者printCoefmat,这取决于你有多少测试。 eps 是一个容差;下面的值打印为&lt; [eps]

Oi <- c(A=321, B=712, C=44) 
Ei <- c(A=203, B=28, C=6) 
tt <- chisq.test(Oi, p=Ei,rescale.p=T)

format.pval(tt$p.value, eps=0.0001)   
# [1] "<0.0001"

ttp <- data.frame(Chisq=tt$statistic, p.value=tt$p.value)
rownames(ttp) <- "Oi vs Ei"
printCoefmat(ttp, has.Pvalue=TRUE, eps.Pvalue=0.0001)    
#          Chisq p.value    
# Oi vs Ei  3090 <0.0001 ***
# ---
# Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

【讨论】:

@DaviMoreira:我看到你没有选中这个答案;它不再满足您的需求了吗?如果有,怎么做?

以上是关于如何在 R 中只打印 4 位而不是科学记数法的 p 值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 PHP 的 uniqid 函数只返回 13 位而不是 14?

如何在 Perl 中只写文件的某些行?

在 Visual Studio 2015 中为调试模式运行 iisexpress 32 位而不是 64 位

如何在while循环中只打印一次帖子?

ggplot2 中的 stat_cor 函数:在两行上打印 R 值和 p 值

同一值集合中只打印一个数据