préallouer la liste en R

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