Skip to content

Accessing list names in lapply

6 messages · Gabor Grothendieck, Duncan Murdoch, Romain Francois +2 more

#
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
#
lapply over the list names rather than the list itself:

junk <- lapply(names(df1), function(nm) plot(df1[[nm]], ylab = nm))


On Thu, Nov 19, 2009 at 7:27 AM, Bjarke Christensen
<Bjarke.Christensen at sydbank.dk> wrote:
#
On 19/11/2009 7:27 AM, Bjarke Christensen wrote:
No, but you can loop over the indices in lapply, not just in a for 
loop.  For example,

lapply(names(df1), function(x) plot(df1[[x]], ylab=x))

Duncan Murdoch
#
Maybe this : http://tolstoy.newcastle.edu.au/R/e4/help/08/04/8720.html

Romain
On 11/19/2009 01:27 PM, Bjarke Christensen wrote:

  
    
#
You can try this:

par(mfcol=c(5,2))
lapply(df1, function(x){
			nm <- names(eval(as.list(sys.call(-1))[[2]]))[as.numeric(gsub("[^0-9]",
"", deparse(substitute(x))))]
			plot(x, main = nm)
		})

On Thu, Nov 19, 2009 at 10:27 AM, Bjarke Christensen
<Bjarke.Christensen at sydbank.dk> wrote:

  
    
#
Thanks to everybody who replied - I got three distinct, very useful
suggestions.

Bjarke Christensen



                                                                           
             Romain Francois                                               
             <romain.francois@                                             
             dbmail.com>                                               Til 
                                       Bjarke Christensen                  
             19-11-2009 14:33          <Bjarke.Christensen at sydbank.dk>     
                                                                        cc 
                                       r-help at r-project.org                
                                                                      Emne 
                                       Re: [R] Accessing list names in     
                                       lapply                              
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           




Maybe this : http://tolstoy.newcastle.edu.au/R/e4/help/08/04/8720.html

Romain
On 11/19/2009 01:27 PM, Bjarke Christensen wrote:
the
is
be
--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://tr.im/EAD5 : LondonR slides
|- http://tr.im/BcPw : celebrating R commit #50000
`- http://tr.im/ztCu : RGG #158:161: examples of package IDPmisc