13 outubro, 2021
apply
;base
;apply()
, lapply()
, sapply()
, tapply()
e mapply()
apply(X, MARGIN, FUN, ..., simplify = TRUE),
em que:
X
argumento que recebe o objeto matriz ou array,MARGIN
argumento que recebe 1
, se a função em FUN
deve ser aplicado na linha, ou recebe 2
se FUN
deve ser aplicado nas colunas,FUN
argumento que recebe a função desejada,...
argumento que recebe argumentos adicionais para FUN
, esimplify
argumento lógico para retorno de resultados simplificados (TRUE
) ou não (FALSE
).# 5 amostras (am1 <- sample(x = 1:1000, size = 10, replace = TRUE)) ## [1] 562 575 346 146 266 903 283 964 318 100 (am2 <- sample(x = 1:1000, size = 10, replace = TRUE)) ## [1] 288 368 492 268 277 355 740 652 858 175 (am3 <- sample(x = 1:1000, size = 10, replace = TRUE)) ## [1] 373 860 997 391 839 196 798 672 99 75 (am4 <- sample(x = 1:1000, size = 10, replace = TRUE)) ## [1] 305 319 791 140 915 576 516 407 812 682 (am5 <- sample(x = 1:1000, size = 10, replace = TRUE)) ## [1] 602 453 525 774 589 812 112 680 622 333
# Amostras em colunas amost_col <- matrix(c(am1, am2, am3, am4, am5), 10, 5); amost_col
## [,1] [,2] [,3] [,4] [,5] ## [1,] 562 288 373 305 602 ## [2,] 575 368 860 319 453 ## [3,] 346 492 997 791 525 ## [4,] 146 268 391 140 774 ## [5,] 266 277 839 915 589 ## [6,] 903 355 196 576 812 ## [7,] 283 740 798 516 112 ## [8,] 964 652 672 407 680 ## [9,] 318 858 99 812 622 ## [10,] 100 175 75 682 333
# Calculando a media por coluna apply(X = amost_col, MARGIN = 2, FUN = mean)
## [1] 446.3 447.3 530.0 546.3 550.2
# Amostras em linhas amost_lin <- matrix(c(am1, am2, am3, am4, am5), 5, 10, byrow = TRUE); amost_lin
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] ## [1,] 562 575 346 146 266 903 283 964 318 100 ## [2,] 288 368 492 268 277 355 740 652 858 175 ## [3,] 373 860 997 391 839 196 798 672 99 75 ## [4,] 305 319 791 140 915 576 516 407 812 682 ## [5,] 602 453 525 774 589 812 112 680 622 333
# Calculando a media por linhas apply(X = amost_lin, MARGIN = 1, FUN = mean)
## [1] 446.3 447.3 530.0 546.3 550.2
# Podemos tambem adicionar argumentos adicionais # em FUN (Media truncada em 10%) apply(X = amost_lin, MARGIN = 1, FUN = mean, trim = 0.1) ## [1] 424.875 430.000 528.500 551.000 572.250 # Usando o argumento simplify, o default: simplify = TRUE apply(X = amost_lin, MARGIN = 1, FUN = mean, simplify = FALSE) ## [[1]] ## [1] 446.3 ## ## [[2]] ## [1] 447.3 ## ## [[3]] ## [1] 530 ## ## [[4]] ## [1] 546.3 ## ## [[5]] ## [1] 550.2
A próxima função é lapply()
, com sintaxe:
lapply(X, FUN, ...),
em que:
X
argumento que recebe uma lista;FUN
argumento que recebe a função desejada, e...
argumento que recebe argumentos adicionais para FUN
.# Lista lapply(list(x = 1:10, y = 11:20), mean) ## $x ## [1] 5.5 ## ## $y ## [1] 15.5 lapply(list(x = 1:10, y = 11:20), "[[", 2) ## $x ## [1] 2 ## ## $y ## [1] 12 lapply(list(mat1 = matrix(1:12, 4, 3)), "[", , 2) ## $mat1 ## [1] 5 6 7 8 matrix(1:12, 4, 3) ## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
A função seguinte é sapply()
, que é um invólucro (wrapper) da função lapply()
, e o acréscimo sintátivo do argumento padrão simplify = TRUE
. Assim, a forma sintática dessa função, segue:
sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE),
em que:
X
argumento que recebe uma lista;FUN
argumento que recebe a função desejada;...
argumento que recebe argumentos adicionais para FUN
; esimplify
, argumento lógico, se TRUE
retorna o resultado de forma simplificada, sendo um vetor atoômico, matriz ou array; se FALSE
o retorno é uma lista;USE.NAMES
, argumento lógico; se TRUE
é retornado o nome inserido nos objetos da lista; se FALSE
, caso contrário.lapply(list(1:10, 11:20), mean) ## [[1]] ## [1] 5.5 ## ## [[2]] ## [1] 15.5 sapply(list(1:10, 11:20), mean) ## [1] 5.5 15.5 # 'simplify = FALSE' em 'sapply()' eh equivalente a 'lapply()' sapply(list(1:10, 11:20), mean, simplify = FALSE) ## [[1]] ## [1] 5.5 ## ## [[2]] ## [1] 15.5
Uma forma multivariada da função apply
, é a função mapply()
, com sintaxe:
mapply(FUN, ..., MoreArgs = NULL, SIMPLIFY = TRUE, USE.NAMES = TRUE)
em que:
FUN
argumentos que recebe a função desejada;...
argumentos para vetorização;MoreArgs
uma lista com argumentos adicionais a FUN
;SIMPLIFY
, argumento lógico, se TRUE
retorna o resultado de forma simplificada, sendo um vetor atoômico, matriz ou array; se FALSE
o retorno é uma lista;USE.NAMES
, argumento lógico; se TRUE
é retornado o nome inserido nos objetos da lista; se FALSE
, caso contrário.mapply(FUN = mean, list(x = 1:10, y = 11:20), USE.NAMES = TRUE) ## x y ## 5.5 15.5 mapply(FUN = mean, list(x = 1:10, y = 11:20), USE.NAMES = FALSE) ## [1] 5.5 15.5 mapply(FUN = rep, x = 1:4, times = 1:4) ## [[1]] ## [1] 1 ## ## [[2]] ## [1] 2 2 ## ## [[3]] ## [1] 3 3 3 ## ## [[4]] ## [1] 4 4 4 4
mapply(FUN = rep, x = 1:4, times = 4) ## [,1] [,2] [,3] [,4] ## [1,] 1 2 3 4 ## [2,] 1 2 3 4 ## [3,] 1 2 3 4 ## [4,] 1 2 3 4 mapply(rep, times = 1:4, MoreArgs = list(x = 4)) ## [[1]] ## [1] 4 ## ## [[2]] ## [1] 4 4 ## ## [[3]] ## [1] 4 4 4 ## ## [[4]] ## [1] 4 4 4 4
mapply(rnorm, n = 10, mean = 1:5)
## [,1] [,2] [,3] [,4] [,5] ## [1,] 1.6840250 1.603524 2.253422 2.387731 3.507960 ## [2,] -0.7187352 2.472191 3.015020 2.910106 5.751541 ## [3,] 1.8816319 1.493832 4.125269 3.206542 5.556132 ## [4,] 1.4697640 2.581277 1.449843 2.669233 6.814892 ## [5,] 1.0510231 2.683744 1.864846 4.437031 6.356493 ## [6,] 2.1710382 1.104355 2.333788 3.646010 5.196103 ## [7,] 0.8368339 1.432737 2.927544 6.703752 4.432431 ## [8,] 0.9890865 0.639900 4.098812 3.388542 6.112436 ## [9,] 0.1364386 1.915704 1.095787 4.678287 5.348190 ## [10,] -0.6050549 1.305821 1.860704 6.127836 4.421345