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.