R rep函数返回错误的元素数

时间:2015-02-24 17:17:21

标签: r

我在R 3.1.2中运行了以下代码:

> 7 - (.05+.1)/.05
[1] 4
> rep(NA, 4)
[1] NA NA NA NA
> rep(NA, 7 - (.05+.1)/.05)
[1] NA NA NA   

请注意,即使rep,上一次7 - (.05+.1)/.05 = 4调用也会返回3个NAs而不是4个。其他人可以复制同样的错误吗?对它有一个简单的解释吗?

1 个答案:

答案 0 :(得分:2)

  

7.31为什么R不认为这些数字相等?

     

可以用R的数字类型精确表示的唯一数字是整数和分数,其分母是2的幂。其他数字必须四舍五入到(通常)53二进制数字精度。结果,两个浮点数不会可靠地相等,除非它们已经由相同的算法计算,并且即使那时也不总是如此。例如

R> a <- sqrt(2)
R> a * a == 2
[1] FALSE
R> a * a - 2
[1] 4.440892e-16
     

函数all.equal()使用.Machine $ double.eps ^ 0.5的数字容差来比较两个对象。如果你想要比这更精确,你需要仔细考虑错误传播。

如果你期望结果是一个整数,你可以使用round函数强制它是一个完美的结果:

7L - (.05+.1)/.05 == 4
[1] FALSE

round(7L - (.05+.1)/.05) == 4
[1] TRUE