Aggiungi elementi a una lista in R

Gustavo du Mortier 26 aprile 2021
  1. Aggiungi a una lista in R con la funzione length
  2. Impostazione di un limite superiore per l’lista
Aggiungi elementi a una lista in R

Esistono molti modi per utilizzare un bucle per aggiungere un numero arbitrario di elementi a una lista in R. Alcuni di essi potrebbero diventare lenti quando il numero di elementi è elevato. Questo tutorial introdurrà i modi più efficienti per aggiungere elementi a una lista in un bucle R.

Un modo comune per implementare un tale algoritmo sarebbe creare un cicli while e utilizzare il comando c (concatenate) all’interno del bucle. All’interno di ogni iterazione, viene aggiunto un elemento utilizzando la funzione c. In questo esempio, un valore (i*3) viene aggiunto a una lista finché la variabile indice non raggiunge 10.000:

i <- 1
mylist <- c()

while (i<10) {
    mylist <- c(mylist, i*3)
    i <- i+1
}

cat(mylist)

Produzione:

3 6 9 12 15 18 21 24 27

Il problema con l’esempio precedente è che ogni volta che viene eseguita la concatenazione, viene copiato l’intero lista. Quando si lavora con set di dati di grandi dimensioni, il tempo necessario per aggiungere tutti gli elementi potrebbe essere enorme.

Aggiungi a una lista in R con la funzione length

Un approccio più efficiente per aggiungere un numero arbitrario di elementi a una lista all’interno di un bucle consiste nell’usare la funzione length in ogni iterazione. Con la funzione length, puoi ottenere il numero di elementi nella lista e assegnare ogni nuovo elemento all’indice dietro l’ultimo elemento: length(mylist) + 1.

L’esempio seguente fa lo stesso del precedente, ma in modo più efficiente.

i <- 1
mylist <- c()

while (i<10) {
    mylist[[(length(mylist) + 1)]] <- i*3
    i <- i+1
}

cat(mylist)

Produzione:

3 6 9 12 15 18 21 24 27

Impostazione di un limite superiore per l’lista

Se sai in anticipo quante volte il tuo bucle itererà, allora invece di far crescere una lista di elementi, puoi definire un vettore di lunghezza fissa e usarlo per contenere tutti gli elementi. Ad esempio, se sai che il tuo bucle itererà 10.000 volte, puoi inizializzare il vettore in questo modo:

mylist <- vector("list", 10000)

Dopodiché, puoi usare un cicli for e impostare il valore di ogni elemento in base al suo indice:

i <- 1
for (i in 1:10000) {
    mylist[[i]] <- i*3
}

Se non conosci il numero di iterazioni, ma hai un limite superiore per esse, puoi definire il vettore con questo limite superiore. Successivamente, al termine dell’esecuzione del bucle, è possibile selezionare solo gli elementi non nulli. Ad esempio, se sai che il tuo bucle non itererà più di 10.000 volte, puoi inizializzare il tuo vettore con 10.000 elementi, anche se non li utilizzerai tutti.

Articolo correlato - R Loop