J'ai des problèmes pour ajouter des données à une liste qui est déjà dans un format de liste. J'ai un programme qui exportera des objets de résultats lors d'une boucle de simulation. Les données elles-mêmes sont stockées sous forme de liste de matrices. Mon idée est de stocker ces listes dans une liste, puis d'enregistrer cette liste en tant qu'objet R pour une analyse ultérieure. Toutefois, je ne parviens pas à y parvenir correctement. Je vais montrer ce que j'ai fait avec un petit exemple abstrait en utilisant simplement des valeurs à la place des données de matrice de ma simulation:
Supposons que j'ai exécuté la boucle de simulation 3 fois. Pendant les itérations, les listes de résultats doivent être rassemblées dans une liste que je vais sauvegarder en tant qu’objet 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 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 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, telle que la liste résultante formatée ressemble au résultat souhaité? Si je fais une analyse plus approfondie de cette liste, je dois pouvoir accéder facilement aux éléments.
Pourriez-vous être 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 que c'est pour les vecteurs. Mais il peut être utilisé ici. Je pensais avoir déjà essayé cela, mais le code du PO comportait certaines anomalies étranges qui pourraient m'avoir induit en erreur:
outlist <- list(resultsa)
outlist <- append(outlist,list(resultsb))
outlist <- append(outlist,list(resultsc))
Mêmes résultats.
Il existe deux autres solutions qui consistent à affecter un index 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 assignation de liste sur une variable en premier
myVar <- list()
il ouvre la possibilité de missions hiearchial par
myVar[[1]] <- list()
myVar[[2]] <- list()
et ainsi de suite ... alors maintenant il est possible de le faire
myVar[[1]][[1]] <- c(...)
myVar[[1]][[2]] <- c(...)
myVar[[1]][['subVar']] <- c(...)
etc
il est également possible d'affecter directement des noms (au lieu de $)
myVar[['nameofsubvar]] <- list()
et alors
myVar[['nameofsubvar]][['nameofsubsubvar']] <- c('...')
important de se rappeler est 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 hiérarchique ...
Je l'ai utilisé pour une implémentation complexe (avec plus de deux niveaux) et ça marche!