From: Gabor Grothendieck <ggrothendieck_at_gmail.com>

Date: Thu, 12 Jun 2008 09:14:17 -0400

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. Received on Thu 12 Jun 2008 - 13:40:25 GMT

Date: Thu, 12 Jun 2008 09:14:17 -0400

Wrap each element in an environment, flatten that and then extact the element in each environment. (Be sure not to use an old version of R since sufficiently far back R had a bug when environments were stored in lists that was since fixed.)

L <- rapply(test.list, function(el) environment(), how = "unlist") lapply(L, "[[", "el")

Alternately use proto objects (http://r-proto.googlecode.com):

library(proto)

L <- rapply(test.list, function(el) proto(, el = el), how = "unlist")
lapply(L, "[[", "el")

On Thu, Jun 12, 2008 at 7:11 AM, Georg Otto <georg.otto_at_tuebingen.mpg.de> wrote:

*>
**> Hi,
**>
*

> thanks a lot for your help. Somehow rapply had escaped my notice. I

*> also have a follow-up question on that. I would like to "flatten" my
**> output list to a list with only one level. Option "unlist" in rapply
**> returns a character vector, in my example:
**>
**>> rapply(test.list, rev, how="unlist")
**> I.A1 I.A2 I.A3 I.B1 I.B2 I.B3 I.C1 I.C2 I.C3 II.A.a1
**> "c" "b" "a" "f" "e" "d" "i" "h" "g" "c"
**> II.A.a2 II.A.a3 II.A.b1 II.A.b2 II.A.b3 II.A.c1 II.A.c2 II.A.c3 II.B1 II.B2
**> "b" "a" "f" "e" "d" "i" "h" "g" "f" "e"
**> II.B3 II.C1 II.C2 II.C3
**> "d" "i" "h" "g"
**>
**>
**> What I rather would like to achieve is a list like this:
**>
**>
**> $I.A
**> [1] "c" "b" "a"
**>
**> $I.B
**> [1] "f" "e" "d"
**>
**> $I.C
**> [1] "i" "h" "g"
**>
**>
**> $II.A.a
**> [1] "c" "b" "a"
**>
**> $II.A.b
**> [1] "f" "e" "d"
**>
**> $II.A.c
**> [1] "i" "h" "g"
**>
**>
**> $II.B
**> [1] "f" "e" "d"
**>
**> $II.C
**> [1] "i" "h" "g"
**>
**>
**> Any hint will be appreciated.
**>
**> Best,
**>
**> Georg
**>
**>
**>
**>
**> Prof Brian Ripley <ripley_at_stats.ox.ac.uk> writes:
**>
**>> See ?rapply
**>>
**>> On Wed, 11 Jun 2008, Georg Otto wrote:
**>>
**>>>
**>>> Hi,
**>>>
**>>> I have a question about applying a function recursively through a
**>>> list. Suppose I have a list where the different elements have
**>>> different levels of recursion:
**>>>
**>>>
**>>>> test.list<-list("I"=list("A"=c("a", "b", "c"), "B"=c("d", "e", "f"), "C"=c("g", "h", "i")),
**>>> + "II"=list("A"=list("a"=c("a", "b", "c"), "b"=c("d", "e", "f"),
**>>> + "c"=c("g", "h", "i")),
**>>> + "B"=c("d", "e", "f"), "C"=c("g", "h", "i")))
**>>>
**>>>> test.list
**>>> $I
**>>> $I$A
**>>> [1] "a" "b" "c"
**>>>
**>>> $I$B
**>>> [1] "d" "e" "f"
**>>>
**>>> $I$C
**>>> [1] "g" "h" "i"
**>>>
**>>>
**>>> $II
**>>> $II$A
**>>> $II$A$a
**>>> [1] "a" "b" "c"
**>>>
**>>> $II$A$b
**>>> [1] "d" "e" "f"
**>>>
**>>> $II$A$c
**>>> [1] "g" "h" "i"
**>>>
**>>>
**>>> $II$B
**>>> [1] "d" "e" "f"
**>>>
**>>> $II$C
**>>> [1] "g" "h" "i"
**>>>
**>>>
**>>>
**>>> I would like to apply a function recursively to that list, in a way
**>>> that the function does someting with each vector (eg. rev()) and
**>>> returns a list of modified vectors that has the same structure as the
**>>> input list, in my example:
**>>>
**>>>
**>>> $I
**>>> $I$A
**>>> [1] "c" "b" "a"
**>>>
**>>> $I$B
**>>> [1] "f" "e" "d"
**>>>
**>>> $I$C
**>>> [1] "i" "h" "g"
**>>>
**>>>
**>>> $II
**>>> $II$A
**>>> $II$A$a
**>>> [1] "c" "b" "a"
**>>>
**>>> $II$A$b
**>>> [1] "f" "e" "d"
**>>>
**>>> $II$A$c
**>>> [1] "i" "h" "g"
**>>>
**>>>
**>>> $II$B
**>>> [1] "f" "e" "d"
**>>>
**>>> $II$C
**>>> [1] "i" "h" "g"
**>>>
**>>>
**>>>
**>>> I understand that with a fixed number of recursion levels one can use
**>>> lapply() in a nested way, but what if the numbers of recursion levels
**>>> is not fixed or is different between the list elements as it is in my
**>>> example?
**>>>
**>>> Any hint will be appreciated.
**>>>
**>>> Best,
**>>>
**>>> Georg
**>>>
**>>> ______________________________________________
**>>> 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.
**>>>
**>>
**>> --
**>> Brian D. Ripley, ripley_at_stats.ox.ac.uk
**>> Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
**>> University of Oxford, Tel: +44 1865 272861 (self)
**>> 1 South Parks Road, +44 1865 272866 (PA)
**>> Oxford OX1 3TG, UK Fax: +44 1865 272595
**>>
**>> ______________________________________________
**>> 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.
**>>
**>
**> ______________________________________________
**> 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.
**>
*

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. Received on Thu 12 Jun 2008 - 13:40:25 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Fri 13 Jun 2008 - 15:00:39 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*