que - tablas en r
cómo aplanar una lista de listas en R (2)
Aquí hay una solución más general para cuando las listas se anidan varias veces y la cantidad de anidación difiere entre los elementos de las listas:
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)
}
}
El paquete tm
extiende c
modo que, si se le da un conjunto de PlainTextDocument
s, crea automáticamente un Corpus
. Desafortunadamente, parece que cada PlainTextDocument
debe especificar por separado.
por ejemplo, si tuviera:
foolist <- list(a, b, c); # where a,b,c are PlainTextDocument objects
Haría esto para obtener un Corpus
:
foocorpus <- c(foolist[[1]], foolist[[2]], foolist[[3]]);
Tengo una lista de listas de ''PlainTextDocument
s que se ve así:
> str(sectioned)
List of 154
$ :List of 6
..$ :Classes ''PlainTextDocument'', ''TextDocument'', ''character'' atomic [1:1] Developing assessment models Developing models
.. .. ..- attr(*, "Author")= chr "John Smith"
.. .. ..- attr(*, "DateTimeStamp")= POSIXlt[1:1], format: "2013-04-30 12:03:49"
.. .. ..- attr(*, "Description")= chr(0)
.. .. ..- attr(*, "Heading")= chr "Research Focus"
.. .. ..- attr(*, "ID")= chr(0)
.. .. ..- attr(*, "Language")= chr(0)
.. .. ..- attr(*, "LocalMetaData")=List of 4
.. .. .. ..$ foo : chr "bar"
.. .. .. ..$ classification: chr "Technician"
.. .. .. ..$ team : chr ""
.. .. .. ..$ supervisor : chr "Bill Jones"
.. .. ..- attr(*, "Origin")= chr "Smith-John_e.txt"
#etc., all sublists have 6 elements
Entonces, para obtener todos mis documentos PlainTextDocument
en un Corpus
, esto funcionaría:
sectioned.Corpus <- c(sectioned[[1]][[1]], sectioned[[1]][[2]], ..., sectioned[[154]][[6]])
¿Alguien puede sugerir una manera más fácil, por favor?
ETA: foo<-unlist(foolist, recursive=FALSE)
produce una lista plana de PlainTextDocuments, que todavía me deja con el problema de alimentar un elemento de lista por elemento a c
Espero que unlist(foolist)
te ayude. Tiene una opción recursive
que es TRUE
por defecto. Así que unlist (tonto, recursivo = FALSO) devolverá la lista de los documentos, y luego puede combinarlos por
do.call(c, unlist(foolist, recursive=FALSE))
do.call
solo aplica la función c
a los elementos de la lista obtenida