在R编程的列表中使用具有不同成对迭代长度的双循环的替代方法

在R编程的列表中使用具有不同成对迭代长度的双循环的替代方法,r,loops,vectorization,lapply,mapply,R,Loops,Vectorization,Lapply,Mapply,我试图评估列表中长度为10(例如“abc”)的一系列非冗余元素对之间的交集,对于每个元素,该交集包含两个长度为20的整数向量,并为具有超过一定数量(例如2)的交集的对索引生成向量,如下所示: set.seed(42) abc <- replicate(10, list(sample(1:100, 20), sample(1:100, 20)), simplify=F) edges <- c() for (i in 1:(length(abc)-1)) { for (j in (

我试图评估列表中长度为10(例如“abc”)的一系列非冗余元素对之间的交集,对于每个元素,该交集包含两个长度为20的整数向量,并为具有超过一定数量(例如2)的交集的对索引生成向量,如下所示:

set.seed(42)
abc <- replicate(10, list(sample(1:100, 20), sample(1:100, 20)), simplify=F)

edges <- c()
for (i in 1:(length(abc)-1)) {
  for (j in (i+1):length(abc)) {
    if (length(intersect(abc[[i]][[1]], abc[[j]][[1]])) >= 2 & length(intersect(abc[[i]][[2]], abc[[j]][[2]])) >= 2) {
      edges <- c(edges, c(i,j))
    }
  }
}
set.seed(42)
abc=2){

边您可以使用
combs
生成索引,您可以在其中迭代:

set.seed(47)
abc[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10][,11][,12][,13]
#> [1,]    1    1    1    1    1    1    1    1    1     2     2     2     2
#> [2,]    2    3    4    5    6    7    8    9   10     3     4     5     6
#>      [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24]
#> [1,]     2     2     2     3     3     3     3     3     4     4     4
#> [2,]     7     8    10     4     6     8     9    10     5     6     7
#>      [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35]
#> [1,]     4     4     4     5     5     5     5     5     6     6     6
#> [2,]     8     9    10     6     7     8     9    10     7     8     9
#>      [,36] [,37] [,38] [,39] [,40] [,41]
#> [1,]     6     7     7     7     8     9
#> [2,]    10     8     9    10    10    10

但是,请注意,由于组合很快变大,而对于10个元素(
choose(10,2)
=45个组合)来说,这是很快的,对于一个包含10000个元素的不难想象的列表,请选中
choose(10000,2)
=49995000个组合,每个组合有两个子元素,将占用更多的内存和时间。

您实际需要什么?是否需要相交?整数向量的值是否确实为1..100?列表的大小是多少?