“match'”中有bug吗;在R?

“match'”中有bug吗;在R?,r,R,这怎么可能: > match(1.68, seq(0.01,10, by = .01)) [1] 168 > match(1.67, seq(0.01,10, by = .01)) [1] NA R函数是否匹配中有错误?典型的R-FAQ 7.31问题。不是虫子。为了避免这种常见的用户错误,请改用函数findInterval并稍微模糊边界。(或对整数序列进行选择。) 对于这类问题,我更喜欢钱伯斯在《数据分析软件》一书中描述的解决方案: match(1.68, seq(1, 1000,

这怎么可能:

> match(1.68, seq(0.01,10, by = .01))
[1] 168
> match(1.67, seq(0.01,10, by = .01))
[1] NA

R函数是否匹配中有错误?

典型的R-FAQ 7.31问题。不是虫子。为了避免这种常见的用户错误,请改用函数findInterval并稍微模糊边界。(或对整数序列进行选择。)


对于这类问题,我更喜欢钱伯斯在《数据分析软件》一书中描述的解决方案:

match(1.68, seq(1, 1000, by = 1)/100)
# [1] 168
match(1.67, seq(1, 1000, by = 1)/100)
# [1] 167
(之所以有效,是因为生成整数序列时不涉及浮点问题。舍入仅在除以100时发生,并与将键入的数字
1.67
转换为二进制时产生的舍入相匹配。)

此解决方案的优点是查找类似
1.6744
的数字的匹配项,该数字显然不在序列
0.10、0.11、0.12、…、9.98、9.99、10.00中:

match(1.6744, seq(1,1000, by = 1)/100)
# [1] NA                               ## Just as I'd like it!

看起来像是一个浮点精度问题,但我对R如何处理这类问题的了解还不够深入。FAQ 7.31与之相同:这当然是一个类似的基本问题,但使用匹配获得正确的索引却有点不同。我们能有一个“R FAQ 7.31”标签吗,我看到它在最后一句中提到了这一点。我将留下这篇评论的放大版,以防它对其他人和我一样有用。
match(1.6744, seq(1,1000, by = 1)/100)
# [1] NA                               ## Just as I'd like it!