apply()找出2个向量中最接近的值

时间:2019-06-06 03:45:14

标签: r vector apply

我有两个向量,我需要编写代码以找到第二向量中最接近第一个向量的值的位置。我还需要它在计算上相当有效,因为数据集很大,所以我试图避免循环。

 v1 <- c(-.2, -.5, -.12, -.8, -.04, -.9, -.2, -.77, -.3, -.01)
 v2 <- c(-.015, -.06, -.12, -.2, -.3, -.4, -.52, -.65, -.78, -.92)

我想要一个代码,该代码将遍历第一个向量中的值,并告诉我v2中哪个值最接近它们,所以我想回答为:

 > answer <- 4, 7, 3, 9, 2, 10, 4, 9, 5, 1

我知道我可以在第一个向量和which.min中使用循环,如下所示:

 for(i in 1:length(v1){
 answer[i] <- (which.min(abs(v1[i] - v2)))
 }

这为我提供了正确的答案,但我只想有一个更好/更快的方法即可。我认为有一种方法可以使用sapply(),但是我已经看了太久了,并且使自己感到困惑。任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

对于sapply,该选项为

sapply(v1, function(x) which.min(abs(v2 - x)))
#[1]  4  7  3  9  2 10  4  9  5  1

或与outer

max.col(-abs(outer(v1, v2, `-`)), 'first')
#[1]  4  7  3  9  2 10  4  9  5  1

或使用findInterval

i1 <- order(v1)
findInterval(v2, v1[i1])[i1]