我已阅读format.pval
的帮助文件,并想知道这是否是一个正确的工具,只要有效数字输出正确格式的数字
在这篇文章中:
R / Sweave formatting numbers with \Sexpr{} in scientific notation
提出了一个解决方案,我想知道函数format.pval
是否已经在这里执行此操作。
我想我们可以在Sweave中使用它作为\Sexpr{format.pval(a value/variable here)}
以及有效位数的选项。
非常感谢...
答案 0 :(得分:3)
我已在knitr
包中添加了该功能,这使knitr
现在非常聪明 - 如果您的$a \times 10^b$
生成一个数字,它会自动使用\Sexpr{}
要么太大要么太小(如果输出HTML而不是TeX,它会自动使用a × 10<sup>b</sup>
)。您现在可以开始从Sweave切换到knitr
:http://yihui.github.com/knitr/
答案 1 :(得分:1)
format.pval
专门用于格式化打印的p.values,例如在查看lm
的输出时。
format.pval
的主力是format
,其目的更为通用。因此,您应该使用format
或其堂兄弟 - prettyNum
和formatC
代替。
脚注:对于格式化日期(POSIXct或POSIXlt),您需要日期格式化函数strptime
答案 2 :(得分:1)
我认为不应该使用format.pval
。我们(统计学家)通常不会对$ p $ -values使用传统的科学记数法,因为前导0也是精确度的反映。因此我们使用总数。你会在大多数学术出版物中找到这个。
例如,报告三位数意味着“跟踪”值报告为“&lt; 0.001”,因为提供的最大精度是第千位。如果我指定digits=3
和eps=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
}