在R编程的列表中使用具有不同成对迭代长度的双循环的替代方法
我试图评估列表中长度为10(例如“abc”)的一系列非冗余元素对之间的交集,对于每个元素,该交集包含两个长度为20的整数向量,并为具有超过一定数量(例如2)的交集的对索引生成向量,如下所示:在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 (
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?列表的大小是多少?