我在一个简单的条件下遇到一些非常不寻常的结果,并且真的需要其他人在他们的机器上运行它以进行健全性检查。这是代码:
mySEQ <- seq(0.1, 1.0, by = 0.1)
for (s in c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)) { print((s + .1) %in% mySEQ) }
mySEQ[3] == 0.3
结果是:
> mySEQ <- seq(0.1, 1.0, by = 0.1)
> for (s in c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)) { print(s %in% mySEQ) }
[1] TRUE
[1] TRUE
[1] FALSE
[1] TRUE
[1] TRUE
[1] TRUE
[1] FALSE
[1] TRUE
[1] TRUE
[1] TRUE
> mySEQ[3] == 0.3
[1] FALSE
> mySEQ[3]
[1] 0.3
对于他们为什么不打印出所有内容,我感到非常困惑。好像0.3和0.7有问题。我更新了R和我的所有软件包,但只需要其他人来运行它来检查它是否只是我。它似乎与seq
函数有关。谢谢。
答案 0 :(得分:3)
这与如何在R中处理浮点数有关。您可以阅读&#34; The R Inferno&#34;的第一章。详情如下:
http://www.burns-stat.com/pages/Tutor/R_inferno.pdf
要回答示例中的问题,请使用all.equal
检查浮点数的等价而不是==
。