[R] lapply and for

Venables, Bill (CMIS, Cleveland) Bill.Venables at CMIS.CSIRO.AU
Mon Jul 23 01:12:14 CEST 2001


Agustin Lobo asks (and I interpolate in his question)

>  -----Original Message-----
> From: 	Agustin Lobo [mailto:alobo at ija.csic.es] 
> Sent:	Monday, 23 July 2001 7:45 AM
> To:	r-help
> Subject:	[R] lapply and for
> 
> 
> Given a list as such:
> 
> > milista
> $"1":
> [1] 23 25 11
> 
> $"2":
> [1] 34  2
> 
> $"3":
> [1]   12    1    0 1050    2
> 
> What's faster:
> 
> > a <- NULL
> > for (i in names(milista)){
> + a <- c(a,(mean(milista[[i]])))
> + }

If you want to make the for() option as slick as possible you should avoid
growing an object inside the loop.  In this case a better way of doing it
would be:

a <- structure(numeric(length(milista)), names = names(milista))
for(i in 1:length(milista)) a[i] <- mean(milista[[i]])

>From a programming point of view this is also preferable as it does not
assume that milista has unique names.  It also labels the elements of a with
the names of milista, if such exist.

> or
> 
> a <- lapply(milista,mean)
> 
> 
> ?

As always in these matters, it depends, but you will need to have a very
long list indeed before you notice the difference, I'd say.  To get an
exactly equivalent, though you need to do

a <- unlist(lapply(milista, mean))

but even then the gain in simplicity for the same outcome is heavily on the
side of the lapply option, I reckon.

Bill Venables.

> 
> (I understand that the second option
> is nicer and more compact, but is it
> faster?).
> 
> Thanks
> 
> Agus
> 
> Dr. Agustin Lobo
> Instituto de Ciencias de la Tierra (CSIC)
> Lluis Sole Sabaris s/n
> 08028 Barcelona SPAIN
> tel 34 93409 5410
> fax 34 93411 0012
> alobo at ija.csic.es
> 
> 
>
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
-.-
> r-help mailing list -- Read
http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
>
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.
_._
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list