我认为文档是不错的,但也许演示将有助于展示每种组合的不同组合如何影响结果。
助手:
func <- function(dig, sci, val = pi) {
mapply(function(d,s)
withr::with_options(list(digits=d, scipen=s),
gsub("^\\[1\\]\\s*", "", capture.output(print(val)))),
dig, sci)
}
digs <- array(digs <- c(1, 2, 5, 10), dim = 4, dimnames = list(digits = digs))
scis <- array(scis <- c(-10, -1, 0, 1, 10), dim = 5, dimnames = list(scipen = scis))
pi的基本输出:
outer(digs, scis, FUN = func, val = pi)
# scipen
# digits -10 -1 0 1 10
# 1 "3e+00" "3" "3" "3" "3"
# 2 "3.1e+00" "3.1" "3.1" "3.1" "3.1"
# 5 "3.1416e+00" "3.1416" "3.1416" "3.1416" "3.1416"
# 10 "3.141592654e+00" "3.141592654" "3.141592654" "3.141592654" "3.141592654"
解释是这样的:
"Prefer fewer significant digits"
# scipen ^
# digits 10 |
# 1 "3" |
# 2 "3.1" |
# 5 "3.1416" |
# 10 "3.141592654" v
"Prefer more significant digits"
<--- "I like sci-notation" "I despise sci-notation" ---->
# scipen
# digits -10 -1 0 1 10
# 10 "3.141592654e+00" "3.141592654" "3.141592654" "3.141592654" "3.141592654"
让我们通过使用1e6 * pi 提高一点赌注,真正展示scipen 如何改变事物:
outer(digs, scis, FUN = func, val = 1e6 * pi)
# scipen
# digits -10 -1 0 1 10
# 1 "3e+06" "3e+06" "3e+06" "3e+06" "3141593"
# 2 "3.1e+06" "3.1e+06" "3141593" "3141593" "3141593"
# 5 "3.1416e+06" "3141593" "3141593" "3141593" "3141593"
# 10 "3.141592654e+06" "3141592.654" "3141592.654" "3141592.654" "3141592.654"
现在是1e12 和1e-12 的极其无趣的例子:
outer(digs, scis, FUN = func, val = 1e12)
# scipen
# digits -10 -1 0 1 10
# 1 "1e+12" "1e+12" "1e+12" "1e+12" "1000000000000"
# 2 "1e+12" "1e+12" "1e+12" "1e+12" "1000000000000"
# 5 "1e+12" "1e+12" "1e+12" "1e+12" "1000000000000"
# 10 "1e+12" "1e+12" "1e+12" "1e+12" "1000000000000"
outer(digs, scis, FUN = func, val = 1e-12)
# scipen
# digits -10 -1 0 1 10
# 1 "1e-12" "1e-12" "1e-12" "1e-12" "0.000000000001"
# 2 "1e-12" "1e-12" "1e-12" "1e-12" "0.000000000001"
# 5 "1e-12" "1e-12" "1e-12" "1e-12" "0.000000000001"
# 10 "1e-12" "1e-12" "1e-12" "1e-12" "0.000000000001"
边界线根据显示的数字而有所不同:对于pi,高于-1 的scipen 不会改变,但对于1e12 和1e-12(“有效数字”来注意,pi 有很多非零数字)。
最大的底线之一:这完全关乎美学,完全关乎事物在 R 控制台或生成的报告中的显示方式。 pi 的值永远不会改变,只是它的显示方式。这也会影响时间戳,使用options("digits.secs")。
顺便说一句:我还测试了scipen=999(和阴性),它们与 +/- 10 没有什么不同。