【问题标题】:rounding of digits数字四舍五入
【发布时间】:2015-11-12 07:18:59
【问题描述】:

我遇到了麻烦

set.seed(1)
sum(abs(rnorm(100)))
set.seed(1)
cumsum(abs(rnorm(100)))

为什么和的值与累积和的最后一个值不同,累积和保留所有小数位并且总和舍入一位数字。

【问题讨论】:

    标签: r


    【解决方案1】:

    这是 R 打印原子向量方式的结果。

    您可能已经将默认数字选项设置为 7,任何介于 -1 和 1 之间的值都将打印 7 个小数位。由于 R 打印原子向量的方式,向量中的所有其他值也将有七个小数位。此外,数字选项设置为 7 的 .6264538 值必须以八位数字 (0.6264538) 打印,因为它必须有前导零。 rnorm() 向量中有两个这样的值。

    如果你单独看cumsum(abs(rnorm(100)))[100],你会发现差异(实际上它与sum(abs(rnorm(100)))的打印值相同,尽管不是完全相同的值)。

    sum(abs(rnorm(100)))
    # [1] 71.67207
    cumsum(abs(rnorm(100)))[100]
    # [1] 71.67207
    

    请注意,这两个值都有七位数字。大概我能想到的最基本的例子如下

    0.123456789
    #[1] 0.1234568
    1.123456789
    #[1] 1.123457
    11.123456789
    # [1] 11.12346
    ## and so on ...
    

    【讨论】:

      【解决方案2】:

      还请注意,这实际上是关于如何打印即呈现值。这不会改变值本身,例如...

      set.seed(1)
      d1 <- sum(abs(rnorm(100)))
      
      set.seed(1)
      d2 <- cumsum(abs(rnorm(100)))
      
      (d1 == d2)[100]
      ## [1] TRUE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-12
        • 2012-08-04
        相关资源
        最近更新 更多