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