r - 如何有效地计算 R 中列表中的匹配项?

标签 r list performance data.table match

我有一个整数向量列表,例如:

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

最佳答案

关于:

sapply(vec_list, function(x) sum(x %in% vec))

关于r - 如何有效地计算 R 中列表中的匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57208154/

相关文章:

java - 等效的 lambda 表达式,获取列表中每个对象的属性

Python pdb——如何更改 "l"命令列出的默认行?

c# - 将持久化的 ADO 2.8 COM 记录集转换为 ADO.Net 数据集

python - 我怎样才能加快这段两行代码的速度?

r - 从向量中查找文本中的匹配单词

在简单的 R 文件上运行 Callgrind

r - 比较 R 中的数据集

r - Set.seed() 结合 for 循环

java - 如何编辑在 map 内设置为值的列表? (具体示例;Java)

c - 4 次加法运算与 2 次乘法运算的性能在 C 中加在一起