web-dev-qa-db-fra.com

Comment ajouter des éléments à une liste dans R (boucle)

J'aimerais ajouter des éléments à une liste en boucle (je ne sais pas exactement combien)

Comme ça:

l <- list();
while(...)
   l <- new_element(...);

À la fin, l[1] serait mon premier élément, l[2] mon deuxième et ainsi de suite.

Savez-vous comment procéder?

89
Philippe Remy

Vous ne devriez pas ajouter à votre liste en utilisant c à l'intérieur de la boucle, car cela peut entraîner un code très lent. En gros, lorsque vous faites c(l, new_element), tout le contenu de la liste est copié. Au lieu de cela, vous devez accéder aux éléments de la liste par index. Si vous savez combien de temps votre liste va être longue, il est préférable de l'initialiser à cette taille en utilisant l <- vector("list", N). Si vous ne le faites pas, vous pouvez l'initialiser pour qu'il ait une longueur égale à un grand nombre (par exemple, si vous avez une limite supérieure sur le nombre d'itérations), puis sélectionnez simplement les éléments non NULL une fois la boucle terminée. Quoi qu’il en soit, l’essentiel est de disposer d’un index permettant de suivre l’élément de liste et d’ajouter, par exemple,

i <- 1
while(...) {
    l[[i]] <- new_element
    i <- i + 1
}

Pour plus d'informations, jetez un coup d'œil à The R Inferno (Chapitre 2) de Patrick Burns.

142
konvas

Ce qui suit ajoute des éléments à une liste dans une boucle.

l<-c()
i=1

while(i<100) {

    b<-i
    l<-c(l,b)
    i=i+1
}
15
Jason