On Wed, Feb 3, 2010 at 3:01 PM, Peng Yu <pengyu...@gmail.com> wrote: > On Wed, Feb 3, 2010 at 1:47 PM, Bert Gunter <gunter.ber...@gene.com> wrote: >> -- and you didn't read my reply. > > I did. You said to use a loop. I think flatten a tree to a certain > level shouldn't be done with a loop. Loop is a way used in the > imperative programming style. Flatten is in the functional programming > style. I don't think that it is a good idea to mix the two.
Meh ... I want to call that statement "hogwash", but I'll refrain. > Also, the flatten a tree to a certain level operation should be > extracted to a well defined function for re-usability. Using a loop is > a bad idea to enhance re-usability. I actually wrote a function that does this a while ago, which I'll paste below. Note that it uses both a loop and recursion (*gasp* the horror!). You can modify the function to accept accept a "times" parameter, if you like, that will likely have to be -1'd on each recursive call ... It's not all that generalized -- in particular I'm looking at the is(the.list, 'list') test, but it did what I needed it to do at the time ... perhaps you'll find it helpful. extractEmbeddedLists <- function(the.list) { ## Lifts embedded lists out of a list, and returns you 1 list with ## Warning : recursion! parsed <- list() if (is(the.list, 'list')) { for (arg in the.list) { parsed <- c(parsed, extractEmbeddedLists(arg)) } } else { parsed <- list(the.list) } parsed } And for your example: R> extractEmbeddedLists(root) [[1]] x y 1 1 1 2 2 2 3 3 3 [[2]] u v 1 7 11 2 8 12 3 9 13 [[3]] p q 1 3 6 2 4 7 3 5 8 -steve -- Steve Lianoglou Graduate Student: Computational Systems Biology | Memorial Sloan-Kettering Cancer Center | Weill Medical College of Cornell University Contact Info: http://cbio.mskcc.org/~lianos/contact ______________________________________________ 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.