Listas

Las listas en R es un objeto consistente en una colección ordenada de objetos. No es necesario que los elementos sean del mismo tipo. Una lista puede contener, números, vectores, texto, data frames, etc..

Crear una lista.

Para crear una lista usaremos la funciín list().

alumno <- list(nombre = 'Juan Perez', 
                edad = 16, 
                notas = c(matematicas = 8.5, fisica = 8.0, biologia = 7.5)
               ) 

alumno
$nombre
[1] "Juan Perez"

$edad
[1] 16

$notas
matematicas      fisica    biologia 
        8.5         8.0         7.5 
str(alumno)
List of 3
 $ nombre: chr "Juan Perez"
 $ edad  : num 16
 $ notas : Named num [1:3] 8.5 8 7.5
  ..- attr(*, "names")= chr [1:3] "matematicas" "fisica" "biologia"

Observamos que la variable alumno es un objeto de tipo List con 3 elementos (nombre, edad, notas)

Seleccionar elementos de una lista

Podemos seleccionar los elementos de una lista usando su posición con doble corchete ([[…]]), o usando el nombre de esa posición ($…).

alumno[[2]]
[1] 16
alumno$edad
[1] 16
alumno[[3]]
matematicas      fisica    biologia 
        8.5         8.0         7.5 
alumno$notas
matematicas      fisica    biologia 
        8.5         8.0         7.5 
str(alumno[3])
List of 1
 $ notas: Named num [1:3] 8.5 8 7.5
  ..- attr(*, "names")= chr [1:3] "matematicas" "fisica" "biologia"
Note

Algo que puede llevar a confusión con las listas, es que si selecionamos un elemento con un corchete simple ([…]), no devuelve el elemento. Devuelve una lista que contiene el elemento.

alumno[2]
$edad
[1] 16
str(alumno[2])
List of 1
 $ edad: num 16

Añadir un elemento a una lista

Para añadir un elemento a una lista podemos usar la función append(). El parametro after indica en que posición se va a añadir el nuevo elmento.

alumno <- append(alumno, 'JuanPerez@example.com', after = 2)
alumno <- setNames(alumno, c('nombre', 'edad', 'email', 'notas'))

alumno
$nombre
[1] "Juan Perez"

$edad
[1] 16

$email
[1] "JuanPerez@example.com"

$notas
matematicas      fisica    biologia 
        8.5         8.0         7.5 

Eliminar un elemento de la lista

alumno[-3]
$nombre
[1] "Juan Perez"

$edad
[1] 16

$notas
matematicas      fisica    biologia 
        8.5         8.0         7.5 
alumno$email <- NULL
alumno
$nombre
[1] "Juan Perez"

$edad
[1] 16

$notas
matematicas      fisica    biologia 
        8.5         8.0         7.5