我正在尝试编写一个函数,它接受了我要求它的许多元素的交集。我确信这可能写在一些包中,但我想自己做。我是R中的新功能。对于给定的列表ll
定义为:
ll <- list(a=data.frame(x=c(1,2,3,4,5,6,7)),
b=data.frame(x=c(1,2,3,4,5,6,7,8,9)),
c=data.frame(x=c(1,3,4,5,6,7)),
d=data.frame(x=c(1,2,3,6,7)),
e=data.frame(x=c(1,2,3,4,5)))
我编写了以下函数,可以正常返回2或3个事物的交集,但我无法弄清楚如何正确地创建最后一部分for (i in 3:length(n)) {.....}
。 我不确定如何将其打开并继续将先前的计算结果添加到下一个十字路口。
test.intersect <- function(vec,mylist){
myvec <- unlist(vec)
n = length(myvec)
if (n == 1) {
stop("must have 2 elements to compare")
}
inter1_2 <- intersect(mylist[[myvec[1]]], mylist[[myvec[2]]])
if (n == 2) {return(nrow(inter1_2))} else
for (i in 3:length(n)){
return(nrow(intersect(inter1_2,mylist[[myvec[i]]])))
}
}
前3个正确评估,而最后一个没有评估。
> test.intersect(vec = list(1), mylist = ll)
Error in test.intersect(vec = list(1), mylist = ll) :
must have 2 elements to compare
> test.intersect(vec = list(1,2), mylist = ll)
[1] 7
> test.intersect(vec = list(1,2,3), mylist = ll)
[1] 6
> test.intersect(vec = list(1,2,3,4), mylist = ll)
[1] 6