On Sat, 2007-10-06 at 19:49 +0000, Adrian Dusa wrote:
> Dear list,
> 
> Given a list of elements like:
> aa <- list(one=c("o", "n", "e"),
>                tea=c("t", "e", "a"),
>                thre=c("t", "h", "r", "e"))
> 
> Is there a function that returns the intersection between all?
> Both match() and intersect() only deal with two arguments, but sometimes I 
> have more.
> 
> Here, it should return "e" (or NA if none of the letters are common).
> 
> I have a solution to apply %in% multiple times (here two times, first between 
> the first two and then between the result and the third) but... perhaps there 
> is a better and quicker way.
> 
> Thanks in advance,
> Adrian


intersectList <- function(x) 
{
  res <- table(unlist(sapply(x, unique)))
  names(res[res == length(x)])
}


In the first line, I use unique() to ensure that if the same letter
appears more than once in the same list element, it is not included in
the result set in error, such as in 'L' here:


L <- list(a = c("a", "b", "b"), b = c("d", "b", "a"), c = c("d", "a"))

> L
$a
[1] "a" "b" "b"

$b
[1] "d" "b" "a"

$c
[1] "d" "a"


So:

> intersectList(aa)
[1] "e"

> intersectList(L)
[1] "a"


HTH,

Marc Schwartz

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to