The intersect(x, y) function from R “base” package works for no more then two vectors x and y. The following function accepts as many vectors as you like and returns the intersection vector of them all:
## recursive intersect function
intersect.rec <- function(x, ...) {
a <- list(...)
if(length(a) == 0) stop("Two or more arguments are needed.")
if(is.list(a[[1]])) a <- a[[1]]
if(length(a) == 1) return(intersect(x, a[[1]]))
else intersect.rec(intersect(x, a[[1]]), a[-1])
}
Sample usage:
x <- letters[1:5] y <- letters[2:5] z <- letters[3:5] intersect.rec(x, y, z) ## returns ## [1] "c" "d" "e"
This is especially a basic example of an R function using dots argument and recursively iterating over them.