[R] lists within a list / data-structure problem
Berton Gunter
gunter.berton at gene.com
Mon Dec 13 17:44:36 CET 2004
Jan:
One thing to keep in mind: A list is vector. So vector-type operations like
c(), "[", etc. work on lists, too (but be careful). Some comments inline
below that I hope will be helpful. A good reference on the S language is
V&R's S PROGRAMMING, which I recommend highly.
-- Bert Gunter
Genentech Non-Clinical Statistics
South San Francisco, CA
"The business of the statistician is to catalyze the scientific learning
process." - George E. P. Box
> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Jan Wantia
> Sent: Monday, December 13, 2004 8:00 AM
> To: r-help at stat.math.ethz.ch
> Subject: [R] lists within a list / data-structure problem
>
> Dear all,
>
> this is a rather basic question; i am not sure how to
> structure my data
> well:
> I want to extraxt various measures from my raw-data. These
> measures are
> of different sizes, so I decided to store them in a list, like:
>
> run1 <- list(Dom = (my_vector), mean = (my_single_number))
>
> I can do that in a for loop for 40 runs, ending up with 40
> lists: run1,
> run2, ..., run40.
> To have all the measurements neatly together I thought of
> making another
> list, containing 40 sub-lists:
>
As you found, this is clumsy. The usual way to do this is to put the results
into a *single* list as follows:
## Contruct the empty list with 40 components:
out<-vector("list", 40)
### loop
... ## do the calculations
out[[i]] <- list(Dom = yourvec,mean=yournumb)
...
> > ALL <- list(run1, run2,..., run40)
> > ALL
> [[1]]
> [[1]]$Dom
> [1] "my_vector"
>
> [[1]]$mean
> [1] "my_single_number"
>
>
> [[2]]
> [[2]]$Dom
> [1] "my_vector"
>
> [[2]]$mean
> [1] "my_single_number"
>
> ...
>
> 1) This may be a bit clumsy as I have to type all the sub-list's names
> in by hand in order to produce my ALL-list: Is there a better way?
>
> 2) I have problems of addressing the data now. I can easily access any
> single value; for example, for the second component of the
> second sub- list:
out[[i]] is the ith component of the list, i.e. the ith 2 component list
containing the result of the ith loop. So out[[i]][[1]] is yourvec for the
ith loop and out[[i]][[2]] is yournumb. These can be abbreciated as
out[[c(i,1]] and out[[c(i,2)]]
>
> > ALL[[2]][[2]]
> [1] "my_single_number",
>
> but: how could I get the second component of all sub-lists,
> to plot, for
> example, all the $mean in one plot? For a matrix, mat[,2]
> would give me
> the whole second column, but
> ALL[[]][[2]]
> does not return all the second components.
>
> I feel that 'lapply' might help me here, but I could not figure out
> exactly how to use it, and it always comes down to the
> problem of how to
> correctly address the components in the sublists.
>
> Or is there maybe a smarter way to do that instead of using a
> list of lists?
>
> Any hint would be warmly appreciated!
>
> Jan
> (R 2.0.1 on windows XP)
>
> --
>
> ______________________________________________________
>
> Jan Wantia
> Deptartment of Informatics, University of Zurich
> Andreasstr. 15
> CH 8050 Zurich
> Switzerland
>
> Tel.: +41 (0) 1 635 4315
> Fax: +41 (0) 1 635 45 07
> email: wantia at ifi.unizh.ch
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
>
More information about the R-help
mailing list