Funciones que se introducen en esta sesión
En ésta sesión se introducen las siguientes funciones
- apply: se usa cuando se desea aplicar una función a las filas o columnas de una matriz (y análogos de dimensiones superiores).
- lapply: se usa cuando se desea aplicar una función a cada elemento de una lista y retornar una lista.
- sapply: se usa cuando se desea aplicar una función a cada elemento de una lista y retorna un vector, un arreglo, una lista, una matriz.
- vapply: se usa cuando se desea usar una función sapply, pero mejorando un poco la velocidad y permitiendo establecer verificación para los valores retornados.
- mapply: se usa cuando se tienen varias estructuras de datos (por ejemplo, vectores, listas) y se desea aplicar una función a los primeros elementos de cada uno, y luego a los segundos elementos de cada uno, y así sucesivamente.
- tapply: se usa cuando se desea aplicar una función a subconjuntos de un vector y los subconjuntos están definidos por algún otro vector, generalmente un factor.
Qué es la familia apply?
La familia apply es un conjunto de funciones de R que permiten manipular de forma repetitiva cada elemento de un vectores, matrices, data frame, arrays y listas. Estas funciones trabajan similar a como lo hacen ciclo, pero con la ventaja de que suelen ser más rápidas, requieren usualmente de menos código, y por ello, es preferible usar las funciones pertenecientes a esta familia, en lugar de construir ciclos.
El objetivo de estas funciones es automatizar tareas completas, mediante el empleo de poca líneas de código, y pueden tomarse como una de las características distintivas de R como lenguaje de programación.
En si, la familia de funciones apply se compone por las funciones apply(), lapply(), sapply(), vapply(), mapply(), y tapply(), y todas tienen la misma característica en común, y es que cada una recibe como argumentos a un objeto y al menos una función
Función apply()
La función apply() aplica una función a todos los elementos de una matriz o cualquier objeto que pueda coercionarse a una matriz, tal como un vector, una arreglo o un marco de datos, y retorna como resultado de la aplicación de la función una matriz.
La estructura de esta función es la siguiente.
apply(X, MARGIN, FUN, ...)
- X: Conjunto de observaciones que puede coercionarse a una matriz.
- MARGIN: Forma en como se aplicará la función a los elementos de X. Donde el identificador 1 indica filas y el identificador 2 indica.
- FUN: La función que se aplicará a las filas o las columnas.
$\ldots$
: Argumentos adicionales asociados a FUN.
Función apply
Construya una matríz de la forma \[\begin{align*} M = \begin{bmatrix}5 & 12 & 14 \\13 & 6 & 3 \\8 & 9 & 12 \\15 & 12 & 11 \end{bmatrix} \end{align*}\] Y con ésta, encuentre el número máximo y número mínimo por cada fila y por cada columna.
# Se crean la matríz
M <- matrix(data = c(5, 12, 14, 13, 6, 3, 8, 9, 12, 15, 12, 11), nrow = 4, ncol = 3,
byrow = T)
M
[,1] [,2] [,3]
[1,] 5 12 14
[2,] 13 6 3
[3,] 8 9 12
[4,] 15 12 11
# Se calcula mínimo por filas
apply(M, 1, min)
[1] 5 3 8 11
# Se calcula máximo por filas
apply(M, 1, max)
[1] 14 13 12 15
# Se calcula mínimo por columnas
apply(M, 2, min)
[1] 5 6 3
# Se calcula máximo por columnas
apply(M, 2, max)
[1] 15 12 14
# Se calcula mínimo y máximo por filas
apply(M, 1, function(x) c(min(x), max(x)))
[,1] [,2] [,3] [,4]
[1,] 5 3 8 11
[2,] 14 13 12 15
# Se calcula mínimo y máximo por columas
apply(M, 2, function(x) c(min(x), max(x)))
[,1] [,2] [,3]
[1,] 5 6 3
[2,] 15 12 14
Función lapply()
La función lapply() aplica una función a todos los elementos de una lista o cualquier objeto que pueda coercionarse a una lista, y retornara como resultado de la aplicación de la función una lista.
La estructura de esta función es la siguiente.
lapply(X, FUN, ...)
- X: Conjunto de observaciones que puede coercionarse a una lista.
- FUN: La función que se aplicará a las filas o las columnas.
$\ldots$
: Argumentos adicionales asociados a FUN.
Función lapply
Emplee la base de datos trees de la base de R, y para ésta, calcule el valor para los cuartiles de cada variable, y retorne los valores calculados en forma de una lista.
# Se muestra la estructura de cada variale
str(trees)
'data.frame': 31 obs. of 3 variables:
$ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
$ Height: num 70 65 63 72 81 83 66 75 80 75 ...
$ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
# Se calculan los cuartiles para cada variable
lapply(trees, quantile)
$Girth
0% 25% 50% 75% 100%
8.30 11.05 12.90 15.25 20.60
$Height
0% 25% 50% 75% 100%
63 72 76 80 87
$Volume
0% 25% 50% 75% 100%
10.2 19.4 24.2 37.3 77.0
Función sapply()
La función sapply() aplica una función a todos los elementos de una lista o cualquier objeto que pueda coercionarse a una lista, y retornara como resultado de la aplicación de la función un vector, un arreglo, una lista o una matriz.
La estructura de esta función es la siguiente.
sapply(X, FUN, ..., simplify = TRUE)
- X: Conjunto de observaciones que puede coercionarse a una lista.
- FUN: La función que se aplicará a las filas o las columnas.
$\ldots$
: Argumentos adicionales asociados a FUN.- simplify: valor lógico, que permite simplificar el resultado obtenido a un vector, matriz o arreglos, si simplify = FALSE, el valor retornado será en forma de lista, similar al obtenido mediante la función lapply.
Función sapply
Emplee la base de datos trees de la base de R, y para ésta, calcule el valor para los cuartiles de cada variable, y retorne los valores calculados de forma simplificada.
# Se muestra la estructura de cada variale
str(trees)
'data.frame': 31 obs. of 3 variables:
$ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
$ Height: num 70 65 63 72 81 83 66 75 80 75 ...
$ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
# Se calculan los cuartiles para cada variable
sapply(trees, quantile, simplify = T)
Girth Height Volume
0% 8.30 63 10.2
25% 11.05 72 19.4
50% 12.90 76 24.2
75% 15.25 80 37.3
100% 20.60 87 77.0
Función vapply()
La función vapply() funciona similar a la función sapply simplificada, puesto que aplica una función a todos los elementos de una lista o cualquier objeto que pueda coercionarse a una lista, y retornara como resultado de la aplicación de la función un arreglo. La principal diferencia entre vapply() y sapply radica en que, vapply() es ligeramente más velóz (más eficiente) y mejorar la consistencia al proporcionar comprobaciones de tipo, limitando los valores retornados.
La estructura de esta función es la siguiente.
vapply(X, FUN, FUN.VALUE, ...)
- X: Conjunto de observaciones que puede coercionarse a una lista.
- FUN: La función que se aplicará a las filas o las columnas.
- FUN.VALUE: Un vector (generalizado), asociado a los valores que se retornarán en FUN para observar si éstos cumplen o no la condición.
$\ldots$
: Argumentos adicionales asociados a FUN.
Función vapply
Emplee la base de datos trees de la base de R, y para ésta, calcule el valor para los cuartiles de cada variable, y use como verificador de resultados que cada valor sea de tipo numérico.
# Se muestra la estructura de cada variale
str(trees)
'data.frame': 31 obs. of 3 variables:
$ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
$ Height: num 70 65 63 72 81 83 66 75 80 75 ...
$ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
# Se calculan los cuartiles para cada variable
vapply(trees, quantile, numeric(5))
Girth Height Volume
0% 8.30 63 10.2
25% 11.05 72 19.4
50% 12.90 76 24.2
75% 15.25 80 37.3
100% 20.60 87 77.0
Función mapply()
La función mapply() es una versión multivariada de sapply(), puesto que aplica una función al primer elementos de cada argumento, luego al segundo elemento de cada argumento y así sucesivamente, y retornara como resultado de la aplicación de la función un vector, un arreglo, una lista o una matriz.
La estructura de esta función es la siguiente.
mapply(FUN, ..., MoreArgs = NULL, SIMPLIFY = TRUE)
- FUN: La función que se aplicará a las filas o las columnas.
$\ldots$
: Argumentos adicionales asociados a FUN.- MoreArgs: Una lista de otros argumentos asociados a FUN.
- simplify: valor lógico, que permite simplificar el resultado obtenido a un vector, matriz o arreglos, si simplify = FALSE, el valor retornado será en forma de lista, similar al obtenido mediante la función lapply.
Función mapply
Emplee la base de datos cars de la base de R, y para ésta, calcule el valor de la velocidad al cuadrado, multiplicada por la distancia, y dividido todo por la suma entre velocidad y distancia. Retorne los valores calculados de forma simplificada.
# Se muestra la estructura de cada variale
str(cars)
'data.frame': 50 obs. of 2 variables:
$ speed: num 4 4 7 7 8 9 10 10 10 11 ...
$ dist : num 2 10 4 22 16 10 18 26 34 17 ...
# Se calcula la función
(speed^2 * dist) / (speed + dist)
mapply(function(x, y) (x^2 * y)/(x + y), cars$speed, cars$dist, SIMPLIFY = T)
[1] 5.333333 11.428571 17.818182 37.172414 42.666667 42.631579
[7] 64.285714 72.222222 77.272727 73.464286 86.871795 77.538462
[13] 90.000000 96.000000 100.800000 112.666667 122.255319 122.255319
[19] 131.762712 127.400000 141.120000 158.918919 166.808511 128.571429
[25] 142.682927 176.086957 170.666667 182.857143 188.734694 202.807018
[31] 215.671642 226.800000 245.189189 261.957447 266.823529 236.290909
[37] 255.476923 282.160920 246.153846 282.352941 288.888889 294.736842
[43] 304.761905 363.000000 370.987013 428.936170 456.827586 457.846154
[49] 480.000000 482.954545
Función tapply()
La función tapply() aplica una función a un vector, en base a una variable factor, y retornara como resultado de la aplicación de la función un vector.
La estructura de esta función es la siguiente.
tapply(X, INDEX, FUN, ..., simplify = TRUE)
- X: Conjunto de observaciones que puede coercionarse a un vector.
- INDEX: Una lista de uno o más elementos que puedan coercionarse a unn factores. Debe ser del mismo tamaño de X.
- FUN: La función que se aplicará a las filas o las columnas.
$\ldots$
: Argumentos adicionales asociados a FUN.- simplify: valor lógico, que permite simplificar el resultado.
Función tapply
Emplee la base de datos cars de la base de R, y para ésta, calcule el valor promedio de distancia, basados en los diferentes niveles de velocidad. Retorne los valores calculados de forma simplificada.
# Se muestra la estructura de cada variale
str(cars)
'data.frame': 50 obs. of 2 variables:
$ speed: num 4 4 7 7 8 9 10 10 10 11 ...
$ dist : num 2 10 4 22 16 10 18 26 34 17 ...
# La media de la distancia, basada
en los niveles de velocidad
tapply(cars$dist, cars$speed, mean, simplify = T)
4 7 8 9 10 11 12 13
6.00000 13.00000 16.00000 10.00000 26.00000 22.50000 21.50000 35.00000
14 15 16 17 18 19 20 22
50.50000 33.33333 36.00000 40.66667 64.50000 50.00000 50.40000 66.00000
23 24 25
54.00000 93.75000 85.00000