Convertir une liste de listes en un vecteur de caractères
J'ai une liste de listes de caractères. Par exemple:
l <- list(list("A"),list("B"),list("C","D"))
Donc, comme vous pouvez le voir, certains éléments sont des listes de longueur > 1.
Je veux convertir cette liste de listes à un personnage, vectoriel, mais je voudrais les listes de longueur > 1 à apparaître comme un élément unique dans le caractère de vecteur.
la unlist
fonction ne permet pas d'atteindre, mais plutôt:
> unlist(l)
[1] "A" "B" "C" "D"
Est-il rien de plus rapide que:
sapply(l,function(x) paste(unlist(x),collapse=""))
Pour obtenir mon résultat souhaité:
"A" "B" "CD"
source d'informationauteur dan | 2016-01-06
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ignorer les unlist étape. Vous avez déjà compris que
paste0
besoinscollapse = TRUE
pour "lier" séquentiel des éléments d'un vecteur ensemble:Voici une variante de @thela de la suggestion, si vous n'avez pas l'esprit d'un multi-méthode de la ligne:
Sinon, si vous n'avez pas l'esprit à l'aide d'un package, regardez les "stringi", spécifiquement
stri_flatten
comme suggéré par @Jota.Voici une comparaison des performances:
Remarque: La relative efficacité de cette approche dépend de la façon dont beaucoup d'éléments de la liste vont avoir
length(x) > 1
. Si la plupart d'entre eux vont être> 1
de toute façon, alors allez simplement avec @42-'s approche.stri_flatten
seulement améliore les performances si vous avez longtemps caractère vecteurs pour coller ensemble comme dans l'exemple de la liste utilisée pour la référence, sinon, il ne l'aide pas.