首页 > 解决方案 > 从 2 个长度不等的列表中获取共同元素

问题描述

我的数据结构如下:

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) 中:更长的参数不是更短的长度的倍数**

我猜这与列表的不等长有关,因为我的命令适用于等长的列表。

标签: r

解决方案


我们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))

推荐阅读