R:all.equal vs all

时间:2017-08-23 02:16:15

标签: r

我正在尝试使用all和all来测试两个向量是否相等。但是它们给出了不同的结果,我不知道为什么。

> x = seq(0,1,by=0.2)
> x
[1] 0.0 0.2 0.4 0.6 0.8 1.0
 > y = c(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)
> all(x == y)
[1]  FALSE
> all.equal(x, y)
[1] TRUE

1 个答案:

答案 0 :(得分:3)

看起来你已经陷入first circle of R hell,浮点数不会像预期的那样表现。

行为不端的对是x [4]& y [4](根据coffeeinjunky上面的评论)。仔细看看他们:

> print(c(x[4], y[4]))
[1] 0.6 0.6
> print(c(x[4], y[4]), digits = 16)
[1] 0.6000000000000001 0.6000000000000000

all.equal的默认容差级别约为1.5e-8,&低于此阈值的差异未报告。这就是为什么all.equal(x, y)返回TRUE,而all(x==y)返回FALSE。

本文更详细地讨论了该问题:Numeric comparison difficulty in R