format.pval() 中的位数错误?

Wrong number of digits in format.pval()?

当在 format.pval() 中指定 3 个数字时,为什么 0.019950 输出 4 个数字:

format.pval(0.019950, eps=.001, digits=3, nsmall=3)
"0.0199"

但是,比如说,0.019951 输出 3 个数字:

format.pval(0.019951, eps=.001, digits=3, nsmall=3)
"0.020"

编辑(解决方案):

根据 dcarlson's 答案,在保留 p 值格式的同时保留 3 位数字的解决方案只是在传递值之前将值四舍五入为 3 位数字到 format.pval():

format.pval(round(0.019950, digits=3), eps=.001, digits=3, nsmall=3)
"0.020"

要解决您的第一个问题 "why does, say, 0.019950 outputs 4 digits":您使用参数 digits = 3 指定要显示前 3 个 小数点后 位(即 199)。来自 ?format.pval

digits: how many significant digits are to be used.

针对您的第二个问题:0.019951digits = 3 首先四舍五入为 "0.02"(您可以通过查看 format.pval(0.019951, eps=.001, digits=3) 的输出来确认)。然后通过设置 nsmall = 3 你要求小数点后 3 位数字,这将 "0.02" 变成 "0.020"

此处和 R 中其他地方的 digits= 参数是重要数字,而不是十进制数字。有效数字忽略小数中的前导 0,因此第一个响应是 3 位有效数字,因为您不计算小数点后的 0。在第二个示例中,答案向上舍入为 .02,但 nsmall=3 强制附加尾随 0。

此外,在 R 中指定 digits= 参数通常被视为建议,因此可能不会遵循。您始终可以使用 round 或格式化函数 sprintf.

强制 R 打印小数位数
format.pval(round(0.019950, 3), digits=3, nsmall=3)
# [1] "0.020"
sprintf("%.3f", .019950)
# [1] "0.020"