我得到了这段代码,它创建了两个向量,并且对于每个元素,a
我想获得最接近的元素b
:
a = rnorm(100)
b = rnorm(100)
c = vapply(a, function(x) which.min(abs(b - x)), 1)
table(duplicated(c))
FALSE TRUE
61 39
Run Code Online (Sandbox Code Playgroud)
如您所见,此方法会提示提供大量重复项,这是正常的,但我不希望有重复项。我想b
在选择索引后删除出现,但我不知道如何在vapply
.
您将获得的最接近的匹配是对向量进行排序,然后将它们配对。下面的排列b
应该可以让你做到这一点。
p <- order(b)[order(order(a))] # order on b and then back transform the ordering of a
sum(abs(a-b[p]))
[1] 20.76788
Run Code Online (Sandbox Code Playgroud)
显然,允许重复确实会让事情变得更接近:
sum(abs(a-b[c]))
[1] 2.45583
Run Code Online (Sandbox Code Playgroud)