【发布时间】:2012-07-31 14:35:20
【问题描述】:
我遇到了函数seq 的某种奇怪(或者只是意料之外?)的行为。
创建简单序列时,某些值无法与 == 运算符正确匹配。
看这个最小的例子:
my.seq <- seq(0, 0.4, len = 5)
table(my.seq) # ok! returns 0 0.1 0.2 0.3 0.4
# 1 1 1 1 1
which(my.seq == 0.2) # ok! returns 3
which(my.seq == 0.3) # !!! returns integer(0)
当手动创建我的序列时,它似乎可以工作:
my.seq2 <- c(0.00, 0.10, 0.20, 0.30, 0.40)
which(my.seq2 == 0.3) # ok! returns 4
你对此有什么解释吗?我通过使用which(round(my.seq, 2) == 0.3) 解决了这个问题,但我会对导致问题的原因感兴趣。
提前感谢您的 cmets。
【问题讨论】:
-
查看
?'=='的文档,尤其是标题为“注意”的部分。 -
谢谢。我只是不知道在这个简单的情况下可能会有任何问题,但是
seq做了一些计算,所以有。好吧,下次我肯定会更加小心使用round? (我的意思是对序列应用isTRUE(all.equal(x, 0.3))会有点矫枉过正,不是吗?:)) -
它是否矫枉过正取决于您的代码中有多少错误。