Ajout d’une liste à une liste de listes dans R

J’ai des problèmes pour append des données à une liste qui est déjà dans un format de liste. J’ai un programme qui exportera des objects de résultats pendant une boucle de simulation. Les données elles-mêmes sont stockées sous la forme d’une liste de masortingces. Mon idée est de stocker ces listes dans une liste, puis d’enregistrer cette liste de listes en tant qu’object R pour une parsing ultérieure, mais j’ai quelques problèmes à résoudre correctement. Je montrerai ce que j’ai fait avec un petit exemple abstrait en utilisant simplement des valeurs au lieu des données de masortingce de ma simulation:

Disons que je lance la boucle de simulation 3 fois. Pendant les itérations, les listes de résultats doivent être rassemblées dans la liste des listes que je vais enregistrer en tant qu’object R:

Liste pour contenir les autres listes et être enregistré: 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 manière, 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 cela, je reçois:

 > 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, de sorte que la liste résultante mise en forme ressemble au résultat souhaité? Si je fais des parsings plus approfondies sur cette liste, je dois pouvoir accéder facilement aux éléments.

Serait-ce ceci, ce que vous voulez avoir:

 # Initial list: myList <- list() # Now the new experiments for(i in 1:3){ myList[[length(myList)+1]] <- list(sample(1:3)) } myList 
 outlist <- list(resultsa) outlist[2] <- list(resultsb) outlist[3] <- list(resultsc) 

Le fichier d'aide de append indique qu'il est destiné aux vecteurs. Mais cela peut être utilisé ici. Je pensais l'avoir déjà essayé mais il y avait des anomalies étranges dans le code de l'OP qui peuvent m'avoir induit en erreur:

 outlist <- list(resultsa) outlist <- append(outlist,list(resultsb)) outlist <- append(outlist,list(resultsc)) 

Même résultat

Il y a deux autres solutions qui impliquent d’affecter à un index un après la fin de la liste. Voici une solution qui utilise append .

 resultsa <- list(1,2,3,4,5) resultsb <- list(6,7,8,9,10) resultsc <- list(11,12,13,14,15) outlist <- list(resultsa) outlist <- append(outlist, list(resultsb)) outlist <- append(outlist, list(resultsc)) 

qui donne le format demandé

 > str(outlist) List of 3 $ :List of 5 ..$ : num 1 ..$ : num 2 ..$ : num 3 ..$ : num 4 ..$ : num 5 $ :List of 5 ..$ : num 6 ..$ : num 7 ..$ : num 8 ..$ : num 9 ..$ : num 10 $ :List of 5 ..$ : num 11 ..$ : num 12 ..$ : num 13 ..$ : num 14 ..$ : num 15 

Cette réponse est similaire à celle acceptée, mais un peu moins compliquée.

 L<-list() for (i in 1:3) { L<-c(L, list(list(sample(1:3)))) } 

En mettant une affectation de liste sur une variable en premier

 myVar <- list() 

il ouvre la possibilité de missions hiérarchiques par

 myVar[[1]] <- list() myVar[[2]] <- list() 

et ainsi de suite ... alors maintenant il est possible de faire

 myVar[[1]][[1]] <- c(...) myVar[[1]][[2]] <- c(...) 

ou

 myVar[[1]][['subVar']] <- c(...) 

etc

il est également possible d'atsortingbuer directement des noms (au lieu de $)

 myVar[['nameofsubvar]] <- list() 

et alors

 myVar[['nameofsubvar]][['nameofsubsubvar']] <- c('...') 

Il est important de se rappeler de toujours utiliser des doubles crochets pour que le système fonctionne

alors obtenir des informations est simple

 myVar$nameofsubvar$nameofsubsubvar 

etc...

Exemple:

 a <-list() a[['test']] <-list() a[['test']][['subtest']] <- c(1,2,3) a $test $test$subtest [1] 1 2 3 a[['test']][['sub2test']] <- c(3,4,5) a $test $test$subtest [1] 1 2 3 $test$sub2test [1] 3 4 5 

une fonctionnalité intéressante du langage R dans sa définition hiearchial ...

Je l'ai utilisé pour une implémentation complexe (avec plus de deux niveaux) et ça marche!