I am trying to write a function that takes the intersection of however many elements I ask for it. I'm sure that this is probably written in some package, but I am trying to do it myself. I'm new to functions in R. For a given list ll defined as:
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)))
I've written the following function that works properly for returning the intersection of 2 or 3 things, but I can't figure out how to correctly make the last part for (i in 3:length(n)) {.....}. I'm not sure how to make it open ended and keep adding a prior calculated result to the next intersection.
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]]])))
  }
}
The first 3 evaluate correctly, while the last one does not.
> 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