[R] Using lapply and list names not available

Gabor Grothendieck ggrothendieck at gmail.com
Tue Feb 5 17:51:34 CET 2008


If you must use lapply then do it over the names rather than the
data:

lapply(names(people), function(nm) plot(1:10, people[[nm]], main = nm))




On Feb 5, 2008 11:47 AM, john seers (IFR) <john.seers at bbsrc.ac.uk> wrote:
>
>
> Hi Gabor
>
> Thanks for the suggestion but I am not sure it actually addresses my
> problem. I will ponder the idea of my data needing to be in a different
> form but I am not sure how to get there easily with what I have got.
>
> The example I gave was just a simplified example to demonstrate how you
> cannot access the names of the list once it has been passed by lapply.
> My real world problem is data coming from 4 spreadsheets for thirteen
> volunteers and 250 variables with various models being calculated and
> values extracted from the models.
>
> lapply seems to be the way to do these repetitive processes on the data,
> volunteers etc but then I end up with a load of lists of lists. I guess
> I could extract the data from the lists into a more suitable format for
> plotting but as lapply has already done all the work it seems a lot of
> extra effort. I would like to be able to do one more lapply to plot the
> data (or whatever) and be able to slap a label on it so I can keep track
> of what I am doing.
>
> Regards
>
> John Seers
>
>
>
>
> -----Original Message-----
> From: Gabor Grothendieck [mailto:ggrothendieck at gmail.com]
> Sent: 05 February 2008 16:17
> To: john seers (IFR)
> Cc: R Help
> Subject: Re: [R] Using lapply and list names not available
>
> The problem is your data is in wide format and you want it in long
> format.
> See ?reshape and also see the reshape package.   In your example, ?stack
> is sufficient:
>
> library(lattice)
> xyplot(values ~ seq_along(values) | ind, data = stack(people))
>
>
> On Feb 5, 2008 11:05 AM, john seers (IFR) <john.seers at bbsrc.ac.uk>
> wrote:
> >
> > Hello All
> >
> > Using lapply and ending up with lists of lists I often end up in the
> > position of not having the names of the list passed by lapply. So, if
> > I am doing something like a plot, and I would like the title to
> > reflect which plot it is, I cannot easily do it. So I find myself
> > doing some unstructured variable passing and counting to be able to
> > keep track of my data. Then I think perhaps I should not use lapply
> > and just use simple loops.
> >
> > Is there a better way to do this?
> >
> > Here is a simple example to illustrate what I am talking about. The
> > list has the names of people and I need the names to use as the
> > headings of the plots.
> >
> >
> >
> > ######################################################################
> > ##
> > #########
> >
> > # Make some test data
> > people<-list(Andrew=rnorm(10), Mary=rnorm(10), Jane=rnorm(10),
> > Richard=rnorm(10))
> >
> >
> > # Function to plot each list entry with its title name
> > doplot<-function(individual, peoplenames) {
> >    peoplecount<<-peoplecount + 1
> >    plot(individual, main=peoplenames[peoplecount]) }
> >
> > #
> > peoplecount<-0
> > jpeg(file="test.jpg")
> > par(mfrow=c(2,2))
> > lapply(people, doplot, names(people))
> > dev.off()
> >
> > ######################################################################
> > ##
> > #############
> >
> >
> > Thank you for any suggestions.
> >
> >
> > John Seers
> >
> > ---
> >
> > ______________________________________________
> > 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