Apply
La función apply nos permite aplicar una función a una matriz, lista o vector que se le pase cómo parámetro.
Argumento 1: matriz, lista o vector
Argumento 2: Puede tomar valores 1 o 2
- 1 para operar sobre las filas
- 2 para operar sobre las columnas
Argumento 3: Operador que se aplica sobre filas o columnas, según indique el argumento 2.
Ejemplos de funciones: sum, mean, count,…
mi_matriz <- matrix(1:9,nrow = 3, ncol = 3) mi_matriz [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 apply(mi_matriz,2,sum) [1] 6 15 24
Lapply
Se diferencia con apply en que opera con listas. Recibe una lista y devuelve una lista
A <- matrix(1:9,nrow = 3, ncol = 3) B <- matrix(11:19,nrow = 3, ncol = 3) C <- matrix(21:29,nrow = 3, ncol = 3) mi_lista <- list(A,B,C) lapply(mi_lista,"[",1,1) [[1]] [1] 1 [[2]] [1] 11 [[3]] [1] 21
Sapply
Se diferencia con apply en que opera con listas. Recibe una lista y devuelve un vector
Ejemplo 1:
sapply(mi_lista,"[",1,1)
[1] 1 11 21
Ejemplo 2: Unificar categorias sustituyendo por elementos de un conjunto
# Ampliar el conjunto de datos
datos$sexo <- c("masculino","h", "hombre", "h","mujer","femenino", "mujer", "m")
# Ver que valores toma la variable
unique(datos$sexo)
## [1] "masculino" "h" "hombre" "mujer" "femenino" "m"
# Definir los nombres que pueden aparecer en el cojunto de datos
nombres.hombre <- c("masculino", "hombre", "h")
nombres.mujer <- c("femenino", "mujer", "m")
library(stringi)
datos$sexo <- tolower(datos$sexo)
datos$sexo <- sapply(as.vector(datos$sexo), function(x) if(x %in% nombres.hombre) "Hombre" else x )
datos$sexo <- sapply(as.vector(datos$sexo), function(x) if(x %in% nombres.mujer) "Mujer" else x )
datos$sexo
## [1] "Hombre" "Hombre" "Hombre" "Hombre" "Mujer" "Mujer" "Mujer" "Mujer"
Tapply
Realiza una operación (parámetro 3) respecto a un vector (parámetro 1) agrupada por los factores que se indiquen como argumento (parámetro 2).
x <- 1:20 y <- factor(rep(letters[1:5], each = 4)) x [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 y [1] a a a a b b b b c c c c d d d d e e e e Levels: a b c d e tapply(x, y, sum) a b c d e 10 26 42 58 74
Mapply
Realiza operaciones entre matrices y devuelve una lista o vector, a continuación se muestran algunas de las operaciones que admite:
Suma el primer elemento de cada vector, después el segundo y así sucesivamente:
mapply(sum, 1:5, 1:5, 1:5) [1] 3 6 9 12 15
Repite cada elemento del primer vector el número de veces que indique el segundo vector:
mapply(rep, 1:4, 4:1)
[[1]]
[1] 1 1 1 1
[[2]]
[1] 2 2 2
[[3]]
[1] 3 3
[[4]]
[1] 4
Vapply
Devuelve un vector con la longitud que tiene cada una de las listas introducidas como parámetro.
x <- list(A = 1, B = 1:3, C = 1:7) x $a [1] 1 $b [1] 1 2 3 $c [1] 1 2 3 4 5 6 7 vapply(x, FUN = length, FUN.VALUE = 0L) a b c 1 3 7
Buen aporte Diego!
Gran aporte, me valio para entender la funció apply!
Diego tienes un error y es que en el Argumento 2: realmente la opción uno es para operar sobre las filas y la opción 2 es para operar sobre las columnas.
Buenas whay, he revisado lo que me comentas y lo he corregido
Muy bien explicadas las diferencias de estas funciones.