comment aplatir une liste de listes en R
tm
extension du paquet c
de sorte que, si on lui donne un ensemble de PlainTextDocument
s il crée automatiquement un Corpus
. Malheureusement, il semble que chaque PlainTextDocument
doit être spécifié séparément.
par exemple si j'ai eu:
foolist <- list(a, b, c); # where a,b,c are PlainTextDocument objects
je le ferais pour obtenir un Corpus
:
foocorpus <- c(foolist[[1]], foolist[[2]], foolist[[3]]);
j'ai une liste de listes de 'PlainTextDocument
s qui ressemble à ceci:
> 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
Donc, pour obtenir tous mes PlainTextDocument
dans un Corpus
, ce serait travail:
sectioned.Corpus <- c(sectioned[[1]][[1]], sectioned[[1]][[2]], ..., sectioned[[154]][[6]])
quelqu'un Peut-il suggérer un moyen plus facile, s'il vous plaît?
ETA: foo<-unlist(foolist, recursive=FALSE)
produit une liste plate de Plaintdocuments, ce qui me laisse toujours avec le problème d'alimenter un élément de liste par élément à c
2 réponses
je pense que unlist(foolist)
va vous aider. Il dispose d'une option recursive
qui est TRUE
par défaut. Donc unlist(foolist récursive=FALSE) retourne la liste des documents, puis vous pouvez les combiner en
do.call(c, unlist(foolist, recursive=FALSE))
do.call
applique juste la fonction c
pour les éléments de la liste
Voici une solution plus générale pour quand les listes sont imbriquées plusieurs fois et que la quantité d'imbrication diffère entre les éléments des listes:
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)
}
}