序列的奇怪行为
Odd Behavior With Sequences
我在一个简单的条件下遇到了一些非常不寻常的结果,真的需要其他人 运行 在他们的机器上进行完整性检查。这是代码:
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
我完全不明白为什么它们不都打印出 TRUE。好像0.3和0.7有什么问题。我更新了 R 和我所有的包,但只需要其他人 运行 来检查是否只有我一个人。它似乎与 seq
函数有关。谢谢。
这跟R中浮点数的处理方式有关,具体可以看"The R Inferno"第一章:
http://www.burns-stat.com/pages/Tutor/R_inferno.pdf
要回答您示例中的问题,请使用 all.equal
检查浮点数的相等性而不是 ==
。
我在一个简单的条件下遇到了一些非常不寻常的结果,真的需要其他人 运行 在他们的机器上进行完整性检查。这是代码:
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
我完全不明白为什么它们不都打印出 TRUE。好像0.3和0.7有什么问题。我更新了 R 和我所有的包,但只需要其他人 运行 来检查是否只有我一个人。它似乎与 seq
函数有关。谢谢。
这跟R中浮点数的处理方式有关,具体可以看"The R Inferno"第一章:
http://www.burns-stat.com/pages/Tutor/R_inferno.pdf
要回答您示例中的问题,请使用 all.equal
检查浮点数的相等性而不是 ==
。