R est inefficace pour développer une structure de données en boucle. Comment pré-allouer une list
d’une certaine taille? masortingx
rend cela facile via les arguments ncol
et nrow
. Comment fait-on cela dans les listes? Par exemple:
x <- list() for (i in 1:10) { x[[i]] <- i }
Je présume que c’est inefficace. Quelle est la meilleure façon de le faire?
vector
peut créer un vecteur vide du mode et de la longueur souhaités.
x <- vector(mode = "list", length = 10)
Pour développer ce que dit @Jilber, lapply
est spécialement conçu pour ce type d’opération.
au lieu de la boucle for, vous pouvez utiliser:
x <- lapply(1:10, function(i) i)
Vous pouvez étendre cela à des exemples plus complexes. Souvent, ce qui est dans le corps de la boucle for peut être directement traduit en une fonction qui accepte une seule ligne qui ressemble à une ligne de chaque itération de la boucle.
Quelque chose comme ça:
x <- vector('list', 10)
Mais utiliser lapply est le meilleur choix