Ajout d'une liste à une liste de listes dans la R
Je vais avoir des problèmes d'ajout de données dans une liste qui est déjà dans un format de liste. J'ai un programme qui permettra d'exporter les résultats des objets lors d'une simulation de la boucle. Les données ne sont stockées qu'une liste de matrices. Mon idée est de stocker ces listes dans une liste, et ensuite enregistrer cette liste de listes comme un objet R pour une analyse plus tard, cependant, je vais avoir quelques problèmes de la réalisation de cet correctement. Je vais vous montrer ce que j'ai fait avec des petits abstraite exemple, juste à l'aide de valeurs au lieu de la matrice de données à partir de ma simulation:
Dire que j'ai lancer la simulation en boucle 3 fois.
Pendant les itérations, la liste de résultats doivent être rassemblées dans une liste de listes que je vais l'enregistrer comme un objet R:
Liste pour contenir les autres listes et être sauvé:
outlist1 <- list()
Première itération:
resultsa <- list(1,2,3,4,5)
outlist <- append(outlist1,resultsa)
Deuxième Itération:
resultsb <- list(6,7,8,9,10)
outlist <- append(outlist1,b)
Troisième Itération:
resultsc <- list(11,12,13,14,15)
outlist <- list(outlist2,c)
Cependant, cette solution ne fonctionne pas avec la croissance d'une liste contenant des listes de cette façon, le résultat souhaité est:
>outlist
[[1]]
[[1]][[1]]
[1] 1
[[1]][[2]]
[1] 2
[[1]][[3]]
[1] 3
[[1]][[4]]
[1] 4
[[1]][[5]]
[1] 5
[[2]]
[[2]][[1]]
[1] 6
[[2]][[2]]
[1] 7
[[2]][[3]]
[1] 8
[[2]][[4]]
[1] 9
[[2]][[5]]
[1] 10
[[3]]
[[3]][[1]]
[1] 11
[[3]][[2]]
[1] 12
[[3]][[3]]
[1] 13
[[3]][[4]]
[1] 14
[[3]][[5]]
[1] 15
Cependant, au lieu de ce que je reçois est:
> outlist3
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[1] 1
[[1]][[1]][[2]]
[1] 2
[[1]][[1]][[3]]
[1] 3
[[1]][[1]][[4]]
[1] 4
[[1]][[1]][[5]]
[1] 5
[[1]][[2]]
[[1]][[2]][[1]]
[1] 6
[[1]][[2]][[2]]
[1] 7
[[1]][[2]][[3]]
[1] 8
[[1]][[2]][[4]]
[1] 9
[[1]][[2]][[5]]
[1] 10
Comment puis-je développer une liste, telle que la liste est formaté comme le résultat souhaité? Si je fais d'autres analyses sur ces listes, j'ai besoin d'être en mesure d'accéder facilement aux éléments.
- vous l'écrasez
outlist
à chaque fois. notez que vous n'avez pasoutlist
dans votre deuxième argument lors de l'ajout.
Vous devez vous connecter pour publier un commentaire.
Pourrait-il être présent, ce que vous voulez avoir:
List[[length(List)+1]] <- sample(1:3)
pour essayer d'arriver à une solution. Merci!!!!newlist <- list(oldlist, list(someobj))
est la réponse la plus populaire donné à cette question, il existe d'autres méthodes, qui soit donné parmi les autres réponses. Apparemment décalé à la syntaxe de la liste est pas sans rappeler l'élégant PROLOGUE de listes, qui à l'aide d'une tête et de la queue.append
's fichier d'aide dit que c'est pour les vecteurs. Mais il peut être utilisé ici. Je pensais que je l'avais essayé avant, mais il y avait d'étranges anomalies dans le cas des OP de code qui peuvent avoir me tromper:Mêmes résultats.
is.vector(list())
retourne TRUE 🙂Il y a deux autres solutions qui impliquent l'attribution d'un indice d'un passé la fin de la liste. Voici une solution qui n'utilise
append
.qui donne à votre format demandé
Cette réponse est similaire à la accepté un, mais un peu moins compliqué.
En mettant une cession de liste sur une variable de première
il ouvre la possibilité de hiearchial affectations par
et ainsi de suite...
alors maintenant, il est possible de faire
ou
et ainsi de suite
il est également possible d'affecter directement les noms (au lieu de $)
et puis
important à retenir est de toujours utiliser des doubles crochets pour que le système fonctionne
ensuite pour obtenir des informations est simple
et ainsi de suite...
exemple:
une caractéristique intéressante de la R de la langue dans hiearchial définition...
Je l'ai utilisé pour une mise en œuvre complexe (avec plus de deux niveaux) et ça marche!!!