我的数据结构如下:
xy
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10
[[2]]
[1] 2 3 4 5 6 7 8 9 10 11 12
xyz
[[1]]
[[1]] [[1]]
[1] 3 4 5 6 7 8 9 10
[[2]]
[[2]] [[1]]
[1] 5 6 7 8 9 10 11 12 13 14 15
[[3]]
[[3]] [[1]]
[1] 6 7 8 9 10 11 12
我想找到列表的每个子集中存在的公共元素。 我的预期输出是:
New_list
[[1]]
[1] 3 4 5 6 7 8 9 10
[[2]]
[1] 5 6 7 8 9 10 11 12
[[3]]
[1] 6 7 8 9 10 11 12
最初,我尝试了以下命令:
Map(intersect,xy,xyz)
但是,它显示以下错误:
警告信息: 在mapply(FUN = f,...,SIMPLIFY = FALSE)中: 较长的参数不是较短的参数的长度的倍数**
我猜想这与列表长度不相等有关,因为我的命令在等长列表上能正常工作。
答案 0 :(得分:4)
我们unlist
第一个list
,展平第二个并在list
上循环并使用intersect
lapply(do.call(c, xyz), function(x) intersect(x, unlist(xy)))
#[[1]]
#[1] 3 4 5 6 7 8 9 10
#[[2]]
#[1] 5 6 7 8 9 10 11 12
#[[3]]
#[1] 6 7 8 9 10 11 12
xy <- list(1:10, 2:12)
xyz <- list(list(3:10), list(5:15), list(6:12))
答案 1 :(得分:1)
l1 <- list(1:10,2:12)
l2 <- list(list(3:10),list(5:15),list(6:12))
lapply(unlist(l2,recursive=F),function(x){intersect(unlist(l1),x)})