Capítulo 5 Creación y e indexación de listas

Las tablas son contenedores de información estructurada: las columnas son del mismo tipo, todas tienen la misma longitud, etc. Gran parte de los datos con los que se trabaja habitualmente en R son estructurados, palabra que, en la jerga estadística, significa que admiten una representación tabular.

Sin embargo, cada vez es más habitual trabajar directamente con información desestructurada. Particularmente, en análisis estadísticos y ciencia de datos. Eso justifica el uso de las listas. Las listas pueden definirse como contenedores genéricos de información desestructurada.

Las listas son objetos muy versátiles que mezclan varias cosas y sirven como contenedores genéricos de datos e información. Estas son una ventaja de R, sobre otros lenguajes como Python que no las tienen. Pero pueden llegar a ser objetos muy complejos, difíciles de entender y visualizar.

a <- c(1,2,3,4,5,6,7,8,9) # vector numerico
b <- c("Casa", "Carro", "Beca") # vector alfanumerico

florecitas <- iris[3:25,2:5] # data frame

lista1 <- list(a, b, florecitas) # una lista con 3 objetos

str(lista1) # ver la estructura de la lista
## List of 3
##  $ : num [1:9] 1 2 3 4 5 6 7 8 9
##  $ : chr [1:3] "Casa" "Carro" "Beca"
##  $ :'data.frame':    23 obs. of  4 variables:
##   ..$ Sepal.Width : num [1:23] 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 ...
##   ..$ Petal.Length: num [1:23] 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 1.5 1.6 ...
##   ..$ Petal.Width : num [1:23] 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 0.2 0.2 ...
##   ..$ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

las listas disponen de un operador para extraer elementos, los dobles corchetes, [[]], que funcionan de manera parecida y análoga a $.

lista1[[2]] # extrae el objeto b
## [1] "Casa"  "Carro" "Beca"
lista1[[3]] [,4] # extrae la columna 4 del objeto 3
##  [1] setosa setosa setosa setosa setosa setosa setosa
##  [8] setosa setosa setosa setosa setosa setosa setosa
## [15] setosa setosa setosa setosa setosa setosa setosa
## [22] setosa setosa
## Levels: setosa versicolor virginica
lista1[[3]] [2,] # extrae la fila 2 del objeto 3
##   Sepal.Width Petal.Length Petal.Width Species
## 4         3.1          1.5         0.2  setosa

Las listas pueden tambien contener graficas o incluso una lista dentro de la lista.

lista1[[4]] <- hist(iris$Sepal.Width) # grafica en el campo 4 de la lista

# plot(lista1[[4]]) # ver la grafica

lista1[[5]] <- list(a, b, rnorm(20)) # lista dentro del campo 5 de la lista