使用map或apply删除R中的嵌套循环



我有一个R中的向量列表:

test_list <- list()
test_list[[1]] <- c(1,2,3,4,5,6,7)
test_list[[2]] <- c(1,2,3)
test_list[[3]] <- c(6,7)
test_list[[4]] <- c(9,10,11)

我想检查每个向量与所有其他向量的交点。嵌套循环方法看起来像这样:

for(i in test_list) {
for(j in test_list) {
intersect(i, j)
}
}

结果是这样的:


[1] 1 2 3 4 5 6 7
[1] 1 2 3
[1] 6 7
numeric(0)
[1] 1 2 3
[1] 1 2 3
numeric(0)
numeric(0)
[1] 6 7
numeric(0)
[1] 6 7
numeric(0)
numeric(0)
numeric(0)
numeric(0)
[1]  9 10 11

我已经看到,我可以使用map或apply删除一个地板循环:

get_overlap_cells <- function(x) {

for(i in test_list) {

overlaping_cells <- intersect(i, x) 
} 
}
r <- map(test_list, get_overlap_cells)

然而,我想删除这两个循环,任何想法如何实现这一点?

谢谢!

combins <- expand.grid(seq_along(test_list), seq_along(test_list))
mapply( function(x,y) intersect(test_list[[x]],test_list[[y]]), 
combins[,1], combins[,2])
[[1]]
[1] 1 2 3 4 5 6 7
[[2]]
[1] 1 2 3
[[3]]
[1] 6 7
[[4]]
numeric(0)
[[5]]
[1] 1 2 3
[[6]]
[1] 1 2 3
[[7]]
numeric(0)
[[8]]
numeric(0)
[[9]]
[1] 6 7
[[10]]
numeric(0)
[[11]]
[1] 6 7
[[12]]
numeric(0)
[[13]]
numeric(0)
[[14]]
numeric(0)
[[15]]
numeric(0)
[[16]]
[1]  9 10 11

最新更新