Ajouter des éléments à une liste en R
Il existe de nombreuses façons d’utiliser une boucle pour ajouter un nombre arbitraire d’éléments à une liste dans R. Certaines d’entre elles peuvent devenir lentes lorsque le nombre d’éléments est élevé. Ce tutoriel présente les moyens les plus efficaces d’ajouter des éléments à une liste dans une boucle R.
Une façon courante d’implémenter un tel algorithme serait de créer une boucle while
et d’utiliser la commande c
(concaténer) dans la boucle. Dans chaque itération, un élément est ajouté en utilisant la fonction c
. Dans cet exemple, une valeur (i*3
) est ajoutée à une liste jusqu’à ce que la variable d’index atteigne 10.000 :
i <- 1
mylist <- c()
while (i<10) {
mylist <- c(mylist, i*3)
i <- i+1
}
cat(mylist)
Production :
3 6 9 12 15 18 21 24 27
Le problème avec l’exemple précédent est que chaque fois que la concaténation est exécutée, la liste entière est copiée. Lorsque l’on travaille avec de grands ensembles de données, le temps nécessaire pour ajouter tous les éléments peut être énorme.
Ajouter à une liste en R avec la fonction length
Une approche plus efficace pour ajouter un nombre arbitraire d’éléments à une liste dans une boucle consiste à utiliser la fonction length
dans chaque itération. Avec la fonction length
, vous pouvez obtenir le nombre d’éléments dans la liste et assigner chaque nouvel élément à l’index derrière le dernier élément : length(mylist) + 1
.
L’exemple ci-dessous fait la même chose que le précédent, mais de manière plus efficace.
i <- 1
mylist <- c()
while (i<10) {
mylist[[(length(mylist) + 1)]] <- i*3
i <- i+1
}
cat(mylist)
Production :
3 6 9 12 15 18 21 24 27
Définition d’une limite supérieure pour la liste
Si vous savez à l’avance combien de fois votre boucle va itérer, alors au lieu de faire croître une liste d’éléments, vous pouvez définir un vecteur de longueur fixe et l’utiliser pour contenir tous les éléments. Par exemple, si vous savez que votre boucle va itéré 10000 fois, vous pouvez initialiser le vecteur de cette façon :
mylist <- vector("list", 10000)
Ensuite, vous pouvez utiliser une boucle for
et définir la valeur de chaque élément par son index :
i <- 1
for (i in 1:10000) {
mylist[[i]] <- i*3
}
Si vous ne connaissez pas le nombre d’itérations, mais que vous avez une limite supérieure pour celles-ci, vous pouvez définir le vecteur avec cette limite supérieure. Plus tard, lorsque la boucle a fini de s’exécuter, vous pouvez ne choisir que les éléments non nuls. Par exemple, si vous savez que votre boucle n’itératera pas plus de 10 000 fois, vous pouvez initialiser votre vecteur avec 10 000 éléments, même si vous ne les utiliserez pas tous.