suppose que nous avons une liste imbriquée: Comment remplacer toutes les valeurs la sortie souhaitée est quelque chose comme: p> Il y a des suggestions pour le faire de cette façon: p> qui n'est pas aussi vectorialisé que je voudrais. De toute évidence, la taille et la performance sont un problème. Une solution de contournement qui apparaît à l'esprit remplace toutes les valeurs nulles de la même manière que cela peut être effectuée pour la trame de données complète à la fois. Et ensuite Je ne suis pas sûr du gain de la performance (s'il n'y en a pas à tous). Peut-être bon vieux null code> avec, disons, na code> pour préserver le Structure des données? Pour que je ne finisse pas de perdre des valeurs / une structure lorsque j'essaie de rendre la trame de données hors de la liste. Comme: p> Unlist () code> et matrice () code> la liste. P> Lapply () code> n'est-ce pas si mauvais. P> p>
4 Réponses :
Nous pouvons utiliser ceci pourrait être converti en stri_list2matrix code> data.frame code> p>
Juste curieux - existe-t-il une option pour remplacer les valeurs, au lieu d'appliquer des fonctions en forme de boucle? Il existe d'autres options telles que rbind.all code> dans data.table code> package ... il atteint le résultat mais l'itinéraire n'est pas tout à fait que je m'attendais.
Après quelques tests sur différents cas, cela semble être une approche la plus universelle.
@ A.Val. Avez-vous essayé des points de repère en utilisant cette méthode et le rbindlist code>
Cela fonctionnerait-il toujours si ma liste imbriquée a des types de vecteurs mixtes? (J'ai des doubles, des caractères et des listes dans ma liste ...)
@Mago sans connaître la structure, il est difficile de dire. Pourriez-vous poster comme nouvelle question
Si vous savez que c'est juste une liste de deux niveaux, vous pouvez parcourir chaque élément en utilisant deux tests de boucles pour EDIT: Alors bien sûr, faites ce que vous faisiez avant. p> p> is.NULL code>.
La boucle est une réponse évidente que je souhaite éviter à tout prix, je devrais probablement élargir ma question un peu à clarifier.
Réponses suivantes trouvées ici , voici un (bit tordu ) façon d'aller dans base r code>:
@Colonelbeauvel, merci, Allez le seul crédit que j'ai ici est d'avoir trouvé le droit de la page ;-)
une approche différente via dput code> et dget code> et le presse-papier. test <- list(
list(a = 1, b = 2, c = NULL),
list(a = NULL, b = 2, c = 3))
dput(test,file="clipboard-1024")
tmp=dget(textConnection(gsub("NULL","NA",readChar(con="clipboard-1024",file.info("clipboard-1024")$size))))
data.frame(matrix(unlist(tmp), nrow = 2, byrow = T))
# X1 X2 X3
#1 1 2 NA
#2 NA 2 3
Pour remplacer les valeurs nulles dans toute la liste, nous devons accéder aux éléments à l'intérieur. Utilisation de
Data.Table 1.9.5 Code> Vous pouvez utiliserrbindlist (intitulé (.....), remplir = vrai) code> dans votre code mis à jour...Quelles appellent des appels à la fabrique et finissent essentiellement avec la même performance que votre réponse originale?
Je n'ai pas vérifié les points de repère, mais je pense que RBindlist serait plus rapide.