R中match函数的奇怪行为

3

我正在尝试找出为什么match函数在比较两个数字向量时显示奇怪的行为。显然与值的精度有关,但我一直无法找到一个好的描述该问题的方法。我已经用zapsmall解决了这个问题,但想知道是否有更好的方法。

示例:

a <- seq(1,1.9,0.1)
a
# [1] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9

b <- seq(0,1.9,0.1)
b
# [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9

match(a,b)
# [1] 11 12 NA 14 NA 16 17 18 19 20

match(zapsmall(a),zapsmall(b))
# [1] 11 12 13 14 15 16 17 18 19 20

浮点数问题?请看:options(digits = 20); a[3] - b[13]。然后是 a[1] - b[11] - user3710546
有没有一种近似匹配的方法?(不是精确匹配)它如何工作? - Andriy T.
2个回答

0

我发现一种可能的解决方案是使用 pmatch (“部分字符串匹配”),虽然该函数首先使用 as.character 将其转换为字符向量。我确信这会导致某些情况出现问题,但对于这种情况来说,它是有效的:

pmatch(a,b)
#[1] 11 12 13 14 15 16 17 18 19 20

0
我发现
a <- 10:19 / 10
a
# [1] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9

b <- 0:19 / 10
b
# [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9

match(a,b)
#  [1] 11 12 13 14 15 16 17 18 19 20

运行良好(无需字符转换),因此问题可能是“seq”而不是“match”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接