3  Lista

En R, las listas se utilizan para almacenar conjuntos de datos heterogéneos en una sola estructura. Puedes crear listas utilizando la función list() o utilizando notación de lista con corchetes cuadrados [ ].

3.1 Acceder a los elementos de la lista

  1. Acceso por índice (corchetes cuadrados)

    Puedes acceder a elementos específicos de una lista utilizando su posición (índice) dentro de la lista. Los índices comienzan desde 1.

  2. Acceso por nombre (operador $)

    Puedes acceder a los elementos de una lista por su nombre utilizando el operador $. Esto es especialmente útil cuando los elementos de la lista tienen nombres.

  3. Acceso por posición (doble corchete [[ ]])

    Puedes acceder a elementos específicos de una lista utilizando [[ ]] y el índice de posición. Esto te dará directamente el valor del elemento, en lugar de una lista que contiene ese valor.

3.1.1 Ejemplos

## Acceso por índice (corchetes cuadrados)
mi_lista2 <- list("a", "b", "c")
elemento1 <- mi_lista2[1]  
elemento2 <- mi_lista2[2]
## Acceso por nombre (operador $)
mi_lista3 <- list(letra1 = "a", letra2 = "b", letra3 = "c")
letra1 <- mi_lista3$letra1
letra2 <- mi_lista3$letra2
## Acceso por posición (doble corchete [[ ]])
mi_lista4 <- list("a", "b", "c")
elemento1 <- mi_lista4[[1]]
elemento2 <- mi_lista4[[2]]

3.2 Agregar elemento(s) en la lista

  1. Usando la función c() para combinar listas

    Puedes usar la función c() para combinar dos listas en una sola. Esto te permite agregar elementos a la lista existente.

  2. Usando el operador $ para asignar un nuevo elemento por nombre

    Puedes agregar un nuevo elemento a la lista utilizando el operador $ y asignando un valor a un nombre que aún no existe en la lista.

  3. Usando la función append()

    La función append() te permite agregar elementos a una lista especificando el nombre del elemento y el valor que deseas agregar.

3.2.1 Ejemplos

## Usando la función c() para combinar listas
mi_lista5 <- list("a", "b", "c")
nuevos_elementos <- list("d", "e")
mi_lista <- c(mi_lista5, nuevos_elementos)
## Usando el operador $ para asignar un nuevo elemento por nombre
mi_lista6 <- list("a", "b", "c")
mi_lista6$nuevo_letra <- "d"
## Usando la función append()
mi_lista7 <- list("a", "b", "c")
mi_lista7 <- append(mi_lista7, list("d"))

3.3 Concatenación y repetición

En R, puedes realizar concatenación y repetición de elementos de diversas maneras, dependiendo de lo que necesites hacer.

  1. Concatenación de vectores por fila o columna. Para concatenar vectores por fila (uno debajo del otro), puedes usar la función rbind(). Por otro lado para concatenar vectores por columna (uno al lado del otro), puedes usar la función cbind().

  2. Concatenación de listas. Para concatenar listas, puedes usar la función c().

  3. Repetición de elementos en un vector. Para repetir elementos en un vector, puedes usar el operador rep().

  4. Repetición de elementos en una lista. Para repetir elementos en una lista, puedes usar un bucle for o funciones como lapply() o replicate().

3.3.1 Ejemplos

## Concatenación de vectores por fila
vector1 <- c(1, 2, 3)
vector2 <- c(4, 5, 6)
resultado <- rbind(vector1, vector2)
## Concatenación de vectores por columna
vector1 <- c(1, 2, 3)
vector2 <- c(4, 5, 6)
resultado <- cbind(vector1, vector2)
## Concatenación de listas
lista8 <- list(1, 2, 3)
lista9 <- list("a", "b", "c")
resultado <- c(lista8, lista9)
## Repetición de elementos en un vector
vector1 <- c(1, 2, 3)
repetir <- rep(vector1, times = 2)
## Repetición de elementos en una lista
elemento <- list("a", "b")
repetir <- replicate(2, elemento, simplify = FALSE)

3.4 Actualizar la lista de R

Para actualizar (modificar) una lista en R, puedes utilizar diferentes enfoques según tus necesidades.

  1. Actualizar por Nombre

    Si deseas actualizar un elemento específico en la lista por su nombre, puedes hacerlo asignando un nuevo valor a ese nombre.

  2. Actualizar por Índice

    Si conoces la posición del elemento que deseas actualizar en la lista, puedes hacerlo mediante el índice. Recuerda que en R los índices comienzan desde 1.

3.4.1 Ejemplos

## Actualizar por Nombre
mi_lista10 <- list(nombre = "Chamber", edad = 17, puntajes = c(90, 80, 70))
mi_lista10$edad <- 22
## Actualizar por Índice
mi_lista11 <- list("a", "b", "c")
mi_lista11[[2]] <- "d"

3.5 Eliminar un elemento de la lista de R

Para eliminar un elemento de una lista en R, puedes utilizar la función NULL para asignar un valor nulo al elemento que deseas eliminar.

  1. Eliminar por Nombre. Si conoces el nombre del elemento que deseas eliminar, puedes hacerlo asignando NULL al nombre correspondiente de la lista.

  2. Eliminar por Índice. Si no conoces el nombre del elemento, pero sabes su posición (índice) en la lista, puedes eliminarlo usando la notación de doble corchete [[]] y asignando NULL al índice correspondiente. Recuerda que los índices comienzan desde 1.

3.5.1 Ejemplos

## Inventamos la siguiente lista
mi_lista12 <- list(nombre = "Jett", edad = 21, puntajes = c(90, 80, 70))
## Eliminar por Nombre
mi_lista12$edad <- NULL
## Eliminar por Índice
mi_lista12[[2]] <- NULL

3.6 Comprobar la pertenencia de un elemento

  1. Utilizando el operador %in%

    El operador %in% se utiliza para verificar si un elemento está presente en un vector o una lista. Devuelve un valor lógico (TRUE o FALSE) que indica si el elemento está en la estructura de datos.

  2. Utilizando la función which()

    La función which() se utiliza para encontrar los índices de elementos que cumplan cierta condición. Puedes usar which() para verificar si un elemento está presente en un vector.

  3. Utilizando la función match()

    La función match() se utiliza para encontrar la posición de un elemento en un vector. Devuelve NA si el elemento no se encuentra en el vector.

3.6.1 Ejemplos

## Utilizando el operador %in%
mi_vector1 <- c("a", "b", "c")
elemento <- "a"
esta_presente <- elemento %in% mi_vector1
## Utilizando la función which()
mi_vector2 <- c("a", "b", "c")
elemento <- "a"
indices <- which(mi_vector2 == elemento)
## Utilizando la función match()
mi_vector3 <- c("a", "b", "c")
elemento <- "a"
posicion <- match(elemento, mi_vector3)

3.7 Ordenar los elementos de la lista

  1. Ordenar elementos alfabéticamente o numéricamente:

    Puedes ordenar elementos de una lista alfabéticamente o numéricamente utilizando la función sort().

  2. Ordenar elementos de una lista alfabéticamente por nombres

    Si deseas ordenar los elementos de una lista alfabéticamente por sus nombres, puedes usar la función sort() junto con names().

3.7.1 Ejemplos

## Ordenar elementos alfabéticamente o numéricamente
# con elementos alfabéticos
mi_lista13 <- list("a", "b", "c")
mi_lista_ordenada <- sort(unlist(mi_lista13))
## Ordenar elementos alfabéticamente o numéricamente
# con elementos numéricos
mi_lista14 <- list(10, 41, 22, 91)
mi_lista_ordenada <- sort(unlist(mi_lista14))
## Ordenar elementos de una lista alfabéticamente por nombres
mi_lista15 <- list(c = "1", b = "2", a = "3")
mi_lista_ordenada <- mi_lista15[order(names(mi_lista15))]

3.8 Longitud de una lista y recuento de un elemento en la lista

Puedes obtener la longitud de una lista y contar cuántas veces aparece un elemento específico en la lista en R utilizando funciones y operadores específicos.

  1. Longitud de una lista. Para obtener la longitud de una lista, puedes utilizar la función length().

  2. Recuento de un elemento en la lista. Para contar cuántas veces aparece un elemento específico en una lista, puedes utilizar la función sum() en combinación con la función sapply().

3.8.1 Ejemplos

## Longitud de una lista
mi_lista16 <- list("a", "b", "c")
longitud <- length(mi_lista16)
## Recuento de un elemento en la lista
mi_lista17 <- list("a", "b", "a", "c", "a")
elemento_a_contar <- "a"
recuento <- sum(sapply(mi_lista17, function(x) x == elemento_a_contar))

3.9 Corte de lista

Para realizar un corte (slicing) de una lista en R y obtener una parte específica de la lista, puedes utilizar la notación de corchetes [ ]. Puedes especificar los índices o nombres de los elementos que deseas extraer de la lista.

  1. Corte por índices. Puedes cortar una lista utilizando los índices de los elementos que deseas extraer. Los índices comienzan desde 1 en R.

  2. Corte por nombres. Si la lista tiene nombres asociados a sus elementos, puedes cortar la lista utilizando los nombres de los elementos que deseas extraer.

  3. Corte por condición lógica. También puedes cortar una lista basándote en una condición lógica.

3.9.1 Ejemplos

## Corte por índices
mi_lista18 <- list("a", "b", "c", "d", "e")
corte <- mi_lista18[2:4]
## Corte por nombres
mi_lista19 <- list(letra1 = "a", letra2 = "b", letra3 = "c")
corte <- mi_lista19[c("letra1", "letra3")]
## Corte por condición lógica
mi_lista20 <- list(5, 10, 15, 20, 25)
corte <- mi_lista20[mi_lista20 > 10]

3.10 Convertir cadenas y tuplas en la lista

En R, puedes convertir cadenas y tuplas en listas de varias maneras, dependiendo de la estructura y formato de tus datos.

  1. Convertir una cadena en una lista de caracteres. Puedes convertir una cadena en una lista de caracteres utilizando la función strsplit().

  2. Convertir una tupla en una lista de elementos. En R, las tuplas no son una estructura de datos nativa como lo son en otros lenguajes de programación, pero puedes utilizar vectores o listas para lograr resultados similares. Si tienes una tupla representada como un vector, simplemente puedes convertir ese vector en una lista, pero si tienes una tupla representada como una lista, no necesitas realizar ninguna conversión adicional, ya que ya tienes una lista.

3.10.1 Ejemplos

## Convertir una cadena en una lista de caracteres
cadena1 <- "a b c"
lista_caracteres <- strsplit(cadena1, " ")
## Convertir una tupla en una lista de elementos
# Conversión a lista
tupla <- c("a", "b", "c")
lista <- as.list(tupla)
## Convertir una tupla en una lista de elementos
# Sin conversión a lista
tupla <- list("a", "b", "c")