r - 从 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) 中:更长的参数不是更短的长度的倍数**
我猜这与列表的不等长有关,因为我的命令适用于等长的列表。
解决方案
我们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))
推荐阅读
- java - 来自 nextDouble 的错误,我该如何解决这个问题?
- alfresco - Alfresco:如何在表单控件中获取用户家的节点引用?
- python - Python:即使用户退出,循环也会继续
- javascript - 随着时间的推移,链接 addEventListeners 会导致性能下降
- html - 当图像代码在它们之间使用组合器或任何其他方式时,如何仅从第一个 div 元素应用 css?
- matlab - Matlab,更新对子 gui 中主 gui 对象的引用
- java - 尽管请求中存在 Accept-Encoding 标头,但未压缩 POST 响应
- python - theharvester 无法使用 wfuzz
- python-3.x - 可以使用 pylint3 仅检查补丁/差异吗?
- azure - 我正在从二级事件中心接收数据。我想将第二级数据转换为分钟级。我应该为此写什么查询?