【问题标题】:What is the use of scipen and digits [duplicate]scipen和digits有什么用[重复]
【发布时间】:2019-10-08 03:06:33
【问题描述】:

options(scipen = 200)
options(digits = 2)
stat.desc(train_cont)
我见过人们使用 pastecs 作为汇总数据的替代方法。 scipen和digits有什么用。请帮助我理解,因为我是新手。

【问题讨论】:

  • 也许可以在?options 上查看这些文档并评论一下特别令人困惑的地方?
  • @Gregor 是的,我阅读了该文件,但无法完全理解

标签: r package


【解决方案1】:

我认为文档是不错的,但也许演示将有助于展示每种组合的不同组合如何影响结果。

助手:

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"

现在是1e121e-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 不会改变,但对于1e121e-12(“有效数字”来注意,pi 有很多非零数字)。

最大的底线之一:这完全关乎美学,完全关乎事物在 R 控制台或生成的报告中的显示方式。 pi 的值永远不会改变,只是它的显示方式。这也会影响时间戳,使用options("digits.secs")

顺便说一句:我还测试了scipen=999(和阴性),它们与 +/- 10 没有什么不同。

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 2017-02-15
    • 2023-04-09
    • 1970-01-01
    • 2017-02-17
    • 2011-09-27
    • 2013-04-22
    • 2012-03-29
    相关资源
    最近更新 更多