5.2 Exploración y manipulación de listas

La función length aplicada a una lista devuelve el número de elementos que contiene. Por eso

length(iris)

es el número de columnas de iris.

El operador $ que utilizamos para extraer columnas de una tabla es propiamente un operador de listas.

modelo.con.dept$coefficients
##  (Intercept) GenderFemale        DeptB        DeptC        DeptD 
##   0.58205140   0.09987009  -0.04339793  -1.26259802  -1.29460647 
##        DeptE        DeptF 
##  -1.73930574  -3.30648006

Además de $, las listas tienen otro operador para extraer elementos, los dobles corchetes [[]] que funcionan de manera parecida al $. Se parece en que solo puede extraer un elemento y lo complementa porque:

  • Admite un número como argumento (y $ no); es decir, permite extraer el elemento n-ésimo de una lista. P.e., iris[[3]].
  • Permite extraer elementos cuyo nombre contiene un espacio (como ocurre en ocasiones con los nombres de columnas de tablas importadas de fuentes externas). Por ejemplo (hipotético), iris[["Petal Length"]].

La función list permite crear listas. Una vez creada una lista se le pueden añadir campos adicionales18.

mi.lista <- list(a = 1:3, b = c("hola", "adiós"))
mi.lista$z <- matrix(1:4, 2, 2)

¿Qué función serviría para concatenar dos listas? ¿Puedes poner un ejemplo?

¿Cómo borrarías un elemento de una lista? Recuerda cómo se hacía con tablas (que no dejan de ser listas).

¿Qué crees que pasaría si haces mi.lista[1:2]?

Compara mi.lista[2] y mi.lista[[2]]. ¿Cuál es la diferencia?

¿Cómo se crea una lista vacía?

Si escribes lm en la consola de R, se muestra el código de dicha función. Hazlo y examina la última parte. Comprueba que no hace otra cosa que añadir progresivamente elementos a una lista, la que define el modelo, para devolverla al final.


  1. En el fondo, una lista en R es lo que en otros lenguajes se denominaría un namespace, i.e., una especie de entorno dentro del cual se pueden crear variables.