Skip to content

1st el of a list of vectors

5 messages · carol white, Richard M. Heiberger, Hervé Pagès +2 more

#
l = list(c(1,2), c(3,5,6), c(7))

sapply(l, `[`, 1)
On Mon, Jul 21, 2014 at 3:55 PM, carol white <wht_crl at yahoo.com> wrote:
#
Hi Carol,
On 07/21/2014 09:10 PM, Richard M. Heiberger wrote:
Using sapply() works but won't be very efficient if you have a very long
list. If you worry about efficiency, you can do the following (using the
IRanges package from Bioconductor):

   > library(IRanges)
   > eltlens <- elementLengths(l)
   > unlist(l, use.names=FALSE)[cumsum(eltlens) - eltlens + 1L]
   [1] 1 3 7

Only worth if the length of your list is > 100000 though...

Cheers,
H.

PS: See http://bioconductor.org/packages/release/bioc/html/IRanges.html
for how to install the IRanges package.

  
    
#
Or
rapply(l,function(x) x[1])
#[1] 1 3 7


set.seed(42)
?l1 <- replicate(1e6, list(sample(1:5,sample(8),replace=T)))
system.time(r1 <- sapply(l1, `[`, 1))
?#? user? system elapsed 
?# 1.324?? 0.000?? 1.326 

system.time(r2 <- rapply(l1, function(x) x[1]))
#?? user? system elapsed 
#? 0.736?? 0.004?? 0.741 

identical(r1,r2)
#[1] TRUE

system.time({
eltlens <- elementLengths(l1)
?r3 <- unlist(l1, use.names=FALSE)[cumsum(eltlens) - eltlens + 1L]
})
# user? system elapsed 
#? 0.153?? 0.000?? 0.154 


A.K.
On Tuesday, July 22, 2014 12:11 AM, Richard M. Heiberger <rmh at temple.edu> wrote:
l = list(c(1,2), c(3,5,6), c(7))

sapply(l, `[`, 1)
On Mon, Jul 21, 2014 at 3:55 PM, carol white <wht_crl at yahoo.com> wrote:
______________________________________________
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.
#
Yes, but note that such comparisons don't necessarily tell you much.
Using your l1 on my computer:
user  system elapsed
    1.2     0.0     1.2
user  system elapsed
   0.81    0.00    0.81

## But
user  system elapsed
   0.64    0.00    0.66
 ## and
user  system elapsed
   0.60    0.00    0.61

sapply() takes a bit of extra time to get the return into the right
data structure. You tell vapply the return type and lapply always
returns a list.

-- Bert



Bert Gunter
Genentech Nonclinical Biostatistics
(650) 467-7374

"Data is not information. Information is not knowledge. And knowledge
is certainly not wisdom."
Clifford Stoll
On Tue, Jul 22, 2014 at 1:14 AM, arun <smartpink111 at yahoo.com> wrote: