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.019951
和 digits = 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"
当在 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.019951
和 digits = 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
.
format.pval(round(0.019950, 3), digits=3, nsmall=3)
# [1] "0.020"
sprintf("%.3f", .019950)
# [1] "0.020"