R中列表的交集

时间:2011-07-08 21:36:51

标签: r list set-intersection

是否有接收列表x的函数并返回y列表y[[i]] = intersect(x[[1]][[i]], x[[2]][[i]], ...)

如果没有,是否有一种R方式可以用几行编码?

2 个答案:

答案 0 :(得分:11)

这有用吗?

x <- list(list(1:3,2:4),list(2:3,4:5),list(3:7,4:5))
maxlen <- max(sapply(x,length))
lapply(seq(maxlen),function(i) Reduce(intersect,lapply(x,"[[",i)))

intersect只接受两个参数,因此您必须使用Reduce作为附加步骤)

PS我没有在任何疑难案件上尝试过这种情况 - 例如长度不均匀的清单。

答案 1 :(得分:9)

Reduce似乎可以简单地使用如下:

> Reduce(intersect,  list(v1 = c("a","b","c","d"), 
+                         v2 = c("a","b","e"), 
+                         v3 = c("a","f","g"))) 
[1] "a"