给定一个列表a
不等长和载体的含矢量b
含有从矢量某些元素a
,我想获得相等的长度的矢量b
包含在索引a
在所述元素b
匹配(这是一个坏的解释我知道)...
下面的代码做这项工作:
a <- list(1:3, 4:5, 6:9)
b <- c(2, 3, 5, 8)
sapply(b, function(x, list) which(unlist(lapply(list, function(y, z) z %in% y, z=x))), list=a)
[1] 1 1 2 3
更换sapply
用一个for循环达到同样的课程
的问题是,这个代码将被用于清单和载体带长度以上1000在一个现实生活设置的功能需要大约15秒(两者for循环和sapply
)。
有没有人有一个想法如何加快这,安全的并行的方法吗? 我没有看出一个量化的方法(我不能在C程序,尽管这很可能是最快的)。
编辑:
只会强调亚伦的这些都给1667倍的数量级的速度增长(从15到0.009)优雅的采用溶液匹配()
我扩大了它一下,允许多个匹配(回报是那么的列表)
a <- list(1:3, 3:5, 3:7)
b <- c(3, 5)
g <- rep(seq_along(a), sapply(a, length))
sapply(b, function(x) g[which(unlist(a) %in% x)])
[[1]]
[1] 1 2 3
[[2]]
[1] 2 3
这个运行时是0.169这可以说是相当慢的,但另一方面更灵活