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.

Esto es un poco contraintuitivo para quienes se han acostumbrado a considerar la longitud de una tabla como su número de filas.

Es el momento de introducir formalmente el operador $, que ya utilizamos en capítulos previos para extraer columnas de una tabla. Ahora vamos a reconocerlo propiamente como 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 disponen de otro operador para extraer elementos, los dobles corchetes, [[]], que funcionan de manera parecida a $. Se parecen en que solo pueden extraer un único elemento y lo complementan 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 adicionales20.

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? Pista: puede ayudarte a entender la diferencia el aplicarles la función is.list.

¿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.