R快速方法在向量B中找到A中每个元素的最接近值

时间:2016-09-07 10:26:37

标签: r

我有一个非常大的未分类矢量A和一个分类矢量B(相对较短)。

A = runif(n = 1e6)
B = seq(0,1,by = 1e-3)

现在给出方向'向前'或'向后',对于A中的每个元素,找到B中具有该方向的最近元素。例如'forward'

A2 = sapply(A, function(x) B[B>=x][1])

给出结果。但是,由于sapply在A上循环,这太慢了。

> system.time(sapply(A, function(x) B[B>=x][1]))
   user  system elapsed 
  17.93    0.00   17.93 

有没有办法更快地完成这项工作?

(保证min(B)<min(A)max(B)>max(A)(如果有用)

1 个答案:

答案 0 :(得分:5)

apk size函数使用二进制搜索解决了这个确切的问题。试试这个:

findInterval

比较:

B[findInterval(A,B)+1]