which() - 序列上的命令找不到模式

TWi*_*kid 1 r

可能重复:
为什么这些数字不相等?

在Gnu R:

which(seq(0, 1600, 0.05) == 0.3) returns
integer(0)
Run Code Online (Sandbox Code Playgroud)

但是这个:

which(round(seq(0, 1600, 0.05),2) == 0.3) returns
[1] 7
Run Code Online (Sandbox Code Playgroud)

这个seq()功能怎么了?

Dir*_*tel 5

这实际上是R FAQ 7.31关于浮点数之间的比较 - 导致了着名的"每个计算机科学家应该知道浮点数".

简而言之,使用identical()和其他辅助函数来比较相对于小值\ epsilon,因为浮点类型不能完全相等.

  • 或者只是测试一个"接近"0.3的条目,其中`(abs(seq(0,1600,0.05) - 0.3)<.001)` (2认同)