首页 > 解决方案 > 有没有一种快速的方法来比较 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_b10000 个元素)。

test <- sapply(list_a, function(x){
 
  out_sum <- sapply(list_b, function(y){
    
    matches <- sum(x %in% y)
    
    return(matches)
    
  })

return(out_sum)
  
})

输出

在此处输入图像描述

有人有想法吗?

标签: rlistperformancevectormatch

解决方案


您可以尝试使用该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)

推荐阅读