17

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

如果没有,是否有一种 R 方法可以用几行代码对其进行编码?

4

2 回答 2

20

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

> Reduce(intersect,  list(v1 = c("a","b","c","d"), 
+                         v2 = c("a","b","e"), 
+                         v3 = c("a","f","g"))) 
[1] "a"
于 2016-12-20T04:13:01.467 回答
12

这行得通吗?

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我没有在任何困难的情况下尝试过这个——例如长度不等的列表。

于 2011-07-08T22:08:45.863 回答