我正在尝试使用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
答案 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