5.3 Las funciones lapply, sapply y split

La función lapply está estrechamente relacionada con las listas. Aunque después, en la sección de programación, volveremos a ella, es conveniente familiarizarse con ella cuanto antes.

La función lapply es una función de orden superior, como tapply, que aplica una función a cada elemento de una lista o vector. Por ejemplo,

lapply(airquality[, 1:4], mean, na.rm = TRUE)

calcula la media de cada una de las cuatro primeras columnas de airquality. El argumento adicional, na.rm = TRUE, igual que como ocurría con tapply, se pasa a la función mean.

La función lapply opera sobre una lista o vector y devuelve, siempre, una lista. Está relacionada con la función sapply, que es una versión simplificada de lapply. Es decir, que cuando la salida admite una representación menos aparatosa que una lista, la simplifica. Por ejemplo,

sapply(airquality[, 1:4], mean, na.rm = TRUE)
##      Ozone    Solar.R       Wind       Temp 
##  42.129310 185.931507   9.957516  77.882353

Tanto lapply como sapply son maps, i.e., funciones que aplican una función a cada elemento de una lista o vector. Como hemos visto, algunas funciones están vectorizadas, p.e.,

sqrt(1:5)
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068

Aun si sqrt no estuviese vectorizada, podríamos aplicársela a un vector haciendo, por ejemplo,

sapply(1:5, sqrt)
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068

Finalmente, la función split permite partir una tabla en trozos en función de un vector que define los grupos. Por ejemplo,

tmp <- split(iris, iris$Species)

Investiga el objeto tmp: ¿qué longitud tiene? ¿qué contiene cada uno de sus componentes?

Usa las funciones lapply y sapply para mostrar la dimensión de cada una de las tablas que contiene tmp.

La función split puede servir para operar en subtablas en combinación con lapply. Sin embargo, paquetes como plyr, que introduciremos más tarde, son más prácticos para este tipo de operaciones.

Usa split para partir iris en dos subtablas al azar con el mismo número de filas.

Transformaciones como las que solicita el ejercicio anterior son comunes en ciencia de datos: partir un conjunto de datos en dos al azar para construir un modelo sobre una parte de los datos y evaluar su rendimiento sobre el complementario.

Usa split para partir iris cinco subtablas, cada una de ellas con 30 filas distintas.

En ciencia de datos se utiliza una técnica, la de la validación cruzada, que está basada en particiones de tablas de datos similares a las que habrás construido en el ejercicio anterior.