【发布时间】:2019-12-04 02:19:53
【问题描述】:
我有一个整数向量列表,例如:
set.seed(1)
vec_list <- replicate(100, sample(1:10000000, size=sample(1:10000, 100)), simplify=FALSE)
还有一个整数向量,例如:
vec <- sample(1:10000000, size=10000)
如何计算 vec_list 中每个向量中出现在向量 vec 中的整数的数量?我可以使用 for 循环来做到这一点。例如:
total_match <- rep(NA, length(vec_list))
for (i in 1:length(vec_list)){
total_match[i] <- length(which(vec_list[[i]] %in% vec))
print(i)
}
但是,我尝试应用的列表和向量也非常大,而且速度很慢。请提供有关如何提高性能的建议。
使用 data.table 更快,但在没有匹配项时不会返回 0。例如:
DT <- data.table(repid=rep(1:length(vec_list), sapply(vec_list, length)), val=unlist(vec_list))
total_match2 <- DT[.(vec), on=.(val), nomatch=0L, .N, keyby=.(repid)]$N
【问题讨论】:
标签: r list performance data.table match