r - 有没有一种快速的方法来比较 R 中的两个向量列表?
问题描述
如果有两个表单列表
list_a <- list(c(1,2,3,4,5), c(6,7,8,9,10), c(11,12,13,14))
list_b <- list(c(1,9,3,7,5), c(2,7,13,9,10), c(1,12,5,14))
我想比较列表中list_a
的元素和列表中的元素list_b
并提取匹配元素的总和。我的意思是,我想比较如下
sum(c(1,2,3,4,5) %in% c(1,9,3,7,5))
sum(c(1,2,3,4,5) %in% c(2,7,13,9,10))
sum(c(1,2,3,4,5) %in% c(1,12,5,14))
sum(c(6,7,8,9,10) %in% c(1,9,3,7,5))
sum(c(6,7,8,9,10) %in% c(2,7,13,9,10))
sum(c(6,7,8,9,10) %in% c(1,12,5,14))
sum(c(11,12,13,14) %in% c(1,9,3,7,5))
sum(c(11,12,13,14) %in% c(2,7,13,9,10))
sum(c(11,12,13,14) %in% c(1,12,5,14))
我使用该函数尝试了以下代码,sapply()
并且输出符合预期(列映射到元素list_a
,行映射到元素list_b
)。但是,当列表的长度很大时,此代码太慢(想象一下list_a
有 10000 个元素和list_b
10000 个元素)。
test <- sapply(list_a, function(x){
out_sum <- sapply(list_b, function(y){
matches <- sum(x %in% y)
return(matches)
})
return(out_sum)
})
输出
有人有想法吗?
解决方案
您可以尝试使用该map
功能。它将运行时间减少了一半以上。
library(purrr)
out_sum <- list_b %>% map(function (y) {
list_a %>% map(function(x) sum(x %in% y))
})
out_matrix <- matrix(unlist(out_sum), ncol = length(list_a), byrow = TRUE)
推荐阅读
- amazon-web-services - !GetAtt 参数错误需要 2 个参数,但模板文件似乎不符合此
- php - PHP - 在while循环中仅从许多内部获取单个图像
- shell - $EDITOR 环境变量导致“找不到命令”
- python - 在烧瓶中绘制空图
- python - .exe 在另一台 PC“ctypes”上不起作用
- c# - “验证”不包含“添加”的定义
- flutter - 是否可以在 Flutter Charts 上缩放垂直轴?
- mysql - Spring Framework @Async 方法 + MySql 性能下降 - 可扩展性问题
- javascript - 多个图像加载动画不起作用
- linux - 如何将 iptables --physdev 语句翻译成 nftables