我有一个非常大的未分类矢量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)
(如果有用)
答案 0 :(得分:5)
apk size
函数使用二进制搜索解决了这个确切的问题。试试这个:
findInterval
比较:
B[findInterval(A,B)+1]