【发布时间】:2011-10-01 15:04:07
【问题描述】:
是否有函数接收列表x 并返回列表y 使得y[[i]] = intersect(x[[1]][[i]], x[[2]][[i]], ...) ?
如果没有,是否有一种 R 方法可以用几行代码对其进行编码?
【问题讨论】:
标签: r list set-intersection
是否有函数接收列表x 并返回列表y 使得y[[i]] = intersect(x[[1]][[i]], x[[2]][[i]], ...) ?
如果没有,是否有一种 R 方法可以用几行代码对其进行编码?
【问题讨论】:
标签: r list set-intersection
这行得通吗?
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 我没有在任何困难的情况下尝试过这个——例如。长度不等的列表。
【讨论】:
看来Reduce可以简单的使用如下:
> Reduce(intersect, list(v1 = c("a","b","c","d"),
+ v2 = c("a","b","e"),
+ v3 = c("a","f","g")))
[1] "a"
【讨论】: