Does this get you the rest of the way? > mfoo2 <- unlist(mfoo, recursive = FALSE) > names(mfoo2) <- unlist(lapply(mfoo, names)) > class(mfoo2) <- "foolist" > str(mfoo2) List of 4 $ A1:List of 2 ..$ x: int 3 ..$ y: int 10 ..- attr(*, "class")= chr "foo" $ A2:List of 2 ..$ x: int [1:2] 6 4 ..$ y: int [1:2] 8 9 ..- attr(*, "class")= chr "foo" $ B1:List of 2 ..$ x: int 2 ..$ y: int 2 ..- attr(*, "class")= chr "foo" $ B2:List of 2 ..$ x: int [1:2] 3 6 ..$ y: int [1:2] 4 2 ..- attr(*, "class")= chr "foo" - attr(*, "class")= chr "foolist"
------------------------------------- David L Carlson Department of Anthropology Texas A&M University College Station, TX 77840-4352 -----Original Message----- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On Behalf Of Ista Zahn Sent: Thursday, October 17, 2013 8:23 AM To: Michael Friendly Cc: R-help Subject: Re: [R] flatten a list of lists unlist(mfoo, recursive = FALSE) gets you pretty close. Best, Ista On Thu, Oct 17, 2013 at 9:15 AM, Michael Friendly <frien...@yorku.ca> wrote: > I have functions that generate lists objects of class "foo" and lists of > lists of these, of class > "foolist", similar to what is shown below. > > How can I flatten something like this to remove the top-level list > structure, i.e., > return a single-level list of "foo" objects, of class "foolist"? > > foo <- function(n) { > result <- list(x=sample(1:10,n), y=sample(1:10,n)) > class(result) <- "foo" > result > } > > multifoo <- function(vec, label, ...) { > result <- lapply(vec, foo, ...) > names(result) <- paste0(label, vec) > class(result) <- "foolist" > result > } > > foo1 <- multifoo(1:2, "A") > foo2 <- multifoo(1:2, "B") > > mfoo <- list(A=foo1, B=foo2) > > str(mfoo, 2) > >> str(mfoo, 2) > List of 2 > $ A:List of 2 > ..$ A1:List of 2 > .. ..- attr(*, "class")= chr "foo" > ..$ A2:List of 2 > .. ..- attr(*, "class")= chr "foo" > ..- attr(*, "class")= chr "foolist" > $ B:List of 2 > ..$ B1:List of 2 > .. ..- attr(*, "class")= chr "foo" > ..$ B2:List of 2 > .. ..- attr(*, "class")= chr "foo" > ..- attr(*, "class")= chr "foolist" > > In this case, what is wanted is a single-level list, of 4 foo objects, A1, > A2, B1, B2, > all of class "foolist" > > -- > Michael Friendly Email: friendly AT yorku DOT ca > Professor, Psychology Dept. & Chair, Quantitative Methods > York University Voice: 416 736-2100 x66249 Fax: 416 736-5814 > 4700 Keele Street Web: http://www.datavis.ca > Toronto, ONT M3J 1P3 CANADA > > ______________________________________________ > 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.