如果我定义:
z <- seq(0, 1, by = 0.1)
按预期,我得到了这个数字向量:
> z
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
现在,说我想在z
中搜索特定值。让我们尝试从0.0
到0.5
的所有值:
> which(z == 0.0)
[1] 1
> which(z == 0.1)
[1] 2
> which(z == 0.2)
[1] 3
> which(z == 0.3)
integer(0)
> which(z == 0.4)
[1] 5
> which(z == 0.5)
[1] 6
看到那里的问题了吗?当应该返回which(z == 0.3)
时,integer(0)
返回4
。
如果进一步扩展此序列,则0.6
,1.2
也会发生相同的情况,而0.9
或1.5
不会发生同样的情况。因此,看来0.3
的偶数倍受此行为影响。
可以通过将z
舍入到最低有效可见位来进行快速修复:
z <- round(z, 1)
然后,将产生预期的结果:
> which(z == 0.0)
[1] 1
> which(z == 0.1)
[1] 2
> which(z == 0.2)
[1] 3
> which(z == 0.3)
[1] 4
> which(z == 0.4)
[1] 5
> which(z == 0.5)
[1] 6
我已经在多个OS和R版本中对此进行了测试,所有这些都给出了相同的结果:
我想知道seq()
是否真的像这样工作,或者确实是一个错误?