Agregar de elementos a una lista en R

Gustavo du Mortier 30 enero 2023
  1. Agregar a una lista en R con la función “longitud”
  2. Establecer un límite superior para la lista
Agregar de elementos a una lista en R

Hay muchas maneras de usar un bucle para añadir un número arbitrario de elementos a una lista en R. Algunos de ellos podrían volverse lentos cuando el número de elementos es alto. Este tutorial presentará las formas más eficientes de agregar elementos a una lista en un bucle R.

Una forma común de implementar tal algoritmo sería crear un bucle while y usar el comando c (concatenar) dentro del bucle. Dentro de cada iteración, se añade un elemento usando la función c. En este ejemplo, se añade un valor (i*3) a una lista hasta que la variable índice alcanza 10000:

i <- 1
mylist <- c()

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

cat(mylist)

Resultado:

3 6 9 12 15 18 21 24 27

El problema del ejemplo anterior es que cada vez que se ejecuta la concatenación, se copia toda la lista. Cuando se trabaja con grandes conjuntos de datos, el tiempo que se tarda en añadir todos los elementos puede ser tremendo.

Agregar a una lista en R con la función “longitud”

Un enfoque más eficiente para añadir un número arbitrario de elementos a una lista dentro de un bucle es usar la función “longitud” en cada iteración. Con la función length, puedes obtener el número de elementos de la lista y asignar cada nuevo elemento al índice que hay detrás del último elemento: length(mylist) + 1.

El siguiente ejemplo hace lo mismo que el anterior, pero de forma más eficiente.

i <- 1
mylist <- c()

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

cat(mylist)

Resultado:

3 6 9 12 15 18 21 24 27

Establecer un límite superior para la lista

Si sabes de antemano cuántas veces tu bucle se itera, entonces en lugar de aumentar una lista de elementos, puedes definir un vector de longitud fija y usarlo para contener todos los elementos. Por ejemplo, si sabes que tu bucle se iterará 10000 veces, puedes inicializar el vector de esta manera:

mylist <- vector("list", 10000)

Después de esto, puedes usar un bucle for y establecer el valor de cada elemento por su índice:

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

Si no sabes el número de iteraciones, pero tienes un límite superior para ellas, puedes definir el vector con este límite superior. Más tarde, cuando el bucle haya terminado de ejecutarse, puedes elegir sólo los elementos no nulos. Por ejemplo, si sabes que tu bucle no va a iterar más de 10000 veces, puedes inicializar tu vector con 10000 elementos, aunque no los utilices todos.

Artículo relacionado - R Loop