How to flatten a list of lists?
Here's another method that worked for my list of lists.
df <- as.data.frame(do.call(rbind, lapply(foolist, as.data.frame)))
Or take a look at new functions in tidyr which work well.
rectangle a nested list into a tidy tibble
rectangling
lst <- list(
list(
age = 23,
gender = "Male",
city = "Sydney"
),
list(
age = 21,
gender = "Female",
city = "Cairns"
)
)
tib <- tibble(lst) %>%
unnest_wider(lst)
df <- as.data.frame(tib)
Here's a more general solution for when lists are nested multiple times and the amount of nesting differs between elements of the lists:
flattenlist <- function(x){
morelists <- sapply(x, function(xprime) class(xprime)[1]=="list")
out <- c(x[!morelists], unlist(x[morelists], recursive=FALSE))
if(sum(morelists)){
Recall(out)
}else{
return(out)
}
}
I expect that unlist(foolist)
will help you. It has an option recursive
which is TRUE
by default.
So unlist(foolist, recursive = FALSE)
will return the list of the documents, and then you can combine them by:
do.call(c, unlist(foolist, recursive=FALSE))
do.call
just applies the function c
to the elements of the obtained list