在R中使用format.pval(和在Sweave中使用\ Sexpr)

时间:2011-12-09 07:25:43

标签: r sweave knitr

我已阅读format.pval的帮助文件,并想知道这是否是一个正确的工具,只要有效数字输出正确格式的数字

在这篇文章中:

R / Sweave formatting numbers with \Sexpr{} in scientific notation

提出了一个解决方案,我想知道函数format.pval是否已经在这里执行此操作。

我想我们可以在Sweave中使用它作为\Sexpr{format.pval(a value/variable here)}以及有效位数的选项。

非常感谢...

4 个答案:

答案 0 :(得分:3)

我已在knitr包中添加了该功能,这使knitr现在非常聪明 - 如果您的$a \times 10^b$生成一个数字,它会自动使用\Sexpr{}要么太大要么太小(如果输出HTML而不是TeX,它会自动使用a &times; 10<sup>b</sup>)。您现在可以开始从Sweave切换到knitrhttp://yihui.github.com/knitr/

答案 1 :(得分:1)

format.pval专门用于格式化打印的p.values,例如在查看lm的输出时。

format.pval的主力是format,其目的更为通用。因此,您应该使用format或其堂兄弟 - prettyNumformatC代替。

脚注:对于格式化日期(POSIXct或POSIXlt),您需要日期格式化函数strptime

答案 2 :(得分:1)

我认为不应该使用format.pval。我们(统计学家)通常不会对$ p $ -values使用传统的科学记数法,因为前导0也是精确度的反映。因此我们使用总数。你会在大多数学术出版物中找到这个。

例如,报告三位数意味着“跟踪”值报告为“&lt; 0.001”,因为提供的最大精度是第千位。如果我指定digits=3eps=0.001,则p值0.0040523报告为0.00405,这表明当需要0.004时,我的精度达到了数十万。

我使用以下小包装器:

format.p <- function(p, precision=0.001) {
  digits <- -log(precision, base=10)
  p <- formatC(p, format='f', digits=digits)
  p[p == formatC(0, format='f', digits=digits)] <- paste0('<', precision)
  p
}

答案 3 :(得分:0)

为保守起见,p值0.32312应该四舍五入为0.324,而不是0.323。这是我的解决方案:

format.p = function(p, precision=0.001) {
  digits = -log(precision, base=10)
  p = formatC(ceiling(p/precision)*precision,format = 'f', digits=digits)
  p[p == formatC(0, format='f', digits=digits)] = paste0('<', precision)
  p
}