[R] Accessing list names in lapply

Bjarke Christensen Bjarke.Christensen at sydbank.dk
Fri Nov 20 15:22:39 CET 2009


Yes, that is it. Or even simpler:
mapply(plot, x=df1, ylab=names(df1), col=1:10, main=paste("Plot",
names(df1)))

Thank you!

Bjarke Christensen



                                                                           
             Bengoechea                                                    
             Bartolomé Enrique                                             
             (SIES 73)                                                 Til 
             <enrique.bengoech         <r-help at r-project.org>              
             ea at credit-suisse.                                          cc 
             com>                      <Bjarke.Christensen at sydbank.dk>     
                                                                      Emne 
             20-11-2009 13:19          RE: [R] Accessing list names in     
                                       lapply                              
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           




Yet another possibility is to iterate on both values and names
simultaneously using mapply():

df1 <- split(
   x=rnorm(n=100, sd=seq(from=1, to=10, each=10)),
   f=letters[seq(from=1, to=10, each=10)]
 )

mapply(function(x, y) plot(x, ylab=y), df1, names(df1))


Enrique

-----Original Message-----
Date: Thu, 19 Nov 2009 13:27:08 +0100
From: Bjarke Christensen <Bjarke.Christensen at sydbank.dk>
Subject: [R] Accessing list names in lapply
To: r-help at r-project.org
Message-ID:

<OF5533F0B9.99F78AB0-ONC1257673.004273AE-C1257673.004466FF at bdpnet.dk>
Content-Type: text/plain; charset=US-ASCII


Hi,

When using lapply (or sapply) to loop over a list, can I somehow access the
index of the list from inside the function?

A trivial example:

df1 <- split(
   x=rnorm(n=100, sd=seq(from=1, to=10, each=10)),
   f=letters[seq(from=1, to=10, each=10)]
 )
str(df1)
#List of 10
# $ a: num [1:10] -0.801 0.418 1.451 -0.554 -0.578 ...
# $ b: num [1:10] -2.464 0.279 4.099 -2.483 1.921 ...
# $ c: num [1:10] -1.14 -1.773 2.512 -2.072 -0.904 ...
# $ d: num [1:10] 2.109 1.243 0.627 -2.343 -6.071 ...
#...
par(mfcol=c(5,2))
lapply(df1, plot)

This plots each element of the list, but the label on the vertical axis is
X[[0L]] (as expected from the documentation in ?lapply). I'd like the
heading for each plot to be the name of that item in the list. This can be
achieved by using a for-loop:

for (i in names(df1)) plot(df1[[i]], ylab=i)

but can it somehow be achieved bu using lapply? I would be hoping for
something like

lapply(df1, function(x) plot(x, ylab=parent.index()))

or some way to parse the index number out of the call, using match.call()
or something like that.

Thanks in advance for any comments,
Bjarke Christensen



------------------------------




More information about the R-help mailing list