[R] How to union the elements in a list?

Bert Gunter gunter.berton at gene.com
Wed Oct 28 20:51:11 CET 2009


... and just for amusement: unique(do.call(c,l))

The do.call and unlist approaches should be faster than Reduce; do.call
_may_ be marginally faster than unlist. Here's a timing comparison:


> z <- split(sample(1000,1e6,rep=TRUE),rep(1:1e5,10))
> length(z)
[1] 100000

## the comparisons:

> system.time(y1 <- Reduce(union,z))
   user  system elapsed 
   5.02    0.00    5.03 

> system.time(y2 <- unique(unlist(z)))
   user  system elapsed 
   1.92    0.00    1.92 

> system.time(y3 <- unique(do.call(c,z)))
   user  system elapsed 
   1.75    0.00    1.75  

> identical(y1,y2)
[1] TRUE
> identical(y2,y3)
[1] TRUE

Obviously, this is unlikely to matter for any reasonable size dataset, but
maybe it's instructive. 

Of course, Reduce wins the RGolf contest  ;-)

Bert Gunter
Genentech Nonclinical Biostatistics
 
 
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
Behalf Of Ben Bolker
Sent: Wednesday, October 28, 2009 12:27 PM
To: r-help at r-project.org
Subject: Re: [R] How to union the elements in a list?




Peng Yu wrote:
> 
> Suppose that I have a list of vectors. I want to compute the union of
> all the vectors in the list. I could use 'for' loop to do so. But I'm
> wondering what would be a better solution that does not need a 'for'
> loop.
> 
> l=list(a=c(1,3,4), b=c(1,3,6), c=c(1,3,7), ....)
> 
> 

Reduce(union,l)

-- 
View this message in context:
http://www.nabble.com/How-to-union-the-elements-in-a-list--tp26100375p261006
84.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help at 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.




More information about the R-help mailing list