不知道我理解的是否正确, 你是这样的意思吗:
假设start里面有一个数999, 排在100位;那么在end里面搜索的范围是排在100位到400位之间的数, 也就是end[100:400]里面搜索符合 (end-999) >= 5 & (end-999) <= 20条件的:
start <- sample(10^6, 10^4)
end <- sample(10^6, 10^5)
start <- sort(start)
end <- sort(end)
start <- cbind(data = start, ind = 1:length(start))
ln.end <- length(end)
ptm <- proc.time()
ls <- apply(start,1,function(x) {end.sr= end[x[2]:min((x[2]+300),ln.end)]
expand.grid(x[1], end.sr[end.sr >= (x[1]+5) & end.sr <= (x[1]+20)])})
df <- do.call(rbind, ls)
t1 <- proc.time() - ptm
t1
应该几天时间就可以得结果,前提是你的电脑内存得够大,毕竟你两个变量都是10亿长度的,产生的结果还有ls跟df也很大。。。。。