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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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@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, [EMAIL PROTECTED] >> 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@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@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@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.