Função apply(), lapply(), sapply(), tapply() em R com exemplos

Este tutorial tem como objetivo apresentar a coleção de funções apply(). A função apply() é a mais básica de todas as coleções. Também aprenderemos sapply(), lapply() e tapply(). A coleção apply pode ser vista como um substituto do loop.

A coleção apply() vem junto com é essencial pacote se você instale R com Anaconda. A função apply in R pode ser alimentada com muitas funções para realizar aplicações redundantes em uma coleção de objetos (quadro de dados, lista, vetor, etc.). O objetivo de apply() é primariprincipalmente para evitar usos explícitos de construções de loop. Eles podem ser usados ​​para uma lista de entrada, matriz ou array e aplicar uma função. Qualquer função pode ser passada para apply().

função aplicar()

Aplique() pega o quadro de dados ou matriz como entrada e fornece a saída em vetor, lista ou array. Aplicar função em R é primariusado principalmente para evitar usos explícitos de construções de loop. É a mais básica de todas as coleções que podem ser usadas em matrizes.

Esta função leva 3 argumentos:

apply(X, MARGIN, FUN)
Here:
-x: an array or matrix
-MARGIN:  take a value or range between 1 and 2 to define where to apply the function:
-MARGIN=1`: the manipulation is performed on rows
-MARGIN=2`: the manipulation is performed on columns
-MARGIN=c(1,2)` the manipulation is performed on rows and columns
-FUN: tells which function to apply. Built functions like mean, median, sum, min, max and even user-defined functions can be applied>

O exemplo mais simples é somar uma matriz sobre todas as colunas. O código apply(m1, 2, sum) aplicará a função sum à matriz 5×6 e retornará a soma de cada coluna acessível no conjunto de dados.

m1 <- matrix(C<-(1:10),nrow=5, ncol=6)
m1
a_m1 <- apply(m1, 2, sum)
a_m1

Saída:

Exemplo de função Apply() em R
Exemplo de função apply() em R

Prática recomendada: armazene os valores antes de imprimi-los no console.

função lapply()

lapidar() função é útil para executar operações em objetos de lista e retorna um objeto de lista com o mesmo comprimento do conjunto original. lappy() retorna uma lista de comprimento semelhante ao objeto de lista de entrada, cada elemento do qual é o resultado da aplicação de FUN ao elemento correspondente da lista. Lapply em R pega lista, vetor ou quadro de dados como entrada e fornece saída em lista.

lapply(X, FUN)
Arguments:
-X: A vector or an object
-FUN: Function applied to each element of x	

l em lapply() significa lista. A diferença entre lapply() e apply() está entre o retorno da saída. A saída de lapply() é uma lista. lapply() pode ser usado para outros objetos, como quadros de dados e listas.

A função lapply() não precisa de MARGIN.

Um exemplo muito fácil pode ser alterar o valor da string de uma matriz para minúsculas com a função tolower. Construímos uma matriz com os nomes dos filmes famosos. O nome está em formato maiúsculo.

movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")
movies_lower <-lapply(movies, tolower)
str(movies_lower)

Saída:

## List of 4
## $:chr"spyderman"
## $:chr"batman"
## $:chr"vertigo"
## $:chr"chinatown"

Podemos usar unlist() para converter a lista em um vetor.

movies_lower <-unlist(lapply(movies,tolower))
str(movies_lower)

Saída:

##  chr [1:4] "spyderman" "batman" "vertigo" "chinatown"

função saply()

aplicar() função recebe lista, vetor ou quadro de dados como entrada e fornece saída em vetor ou matriz. É útil para operações em objetos de lista e retorna um objeto de lista com o mesmo comprimento do conjunto original. A função Sapply em R faz o mesmo trabalho que a função lapply(), mas retorna um vetor.

sapply(X, FUN)
Arguments:
-X: A vector or an object
-FUN: Function applied to each element of x

Podemos medir a velocidade mínima e as distâncias de parada dos carros a partir do conjunto de dados de carros.

dt <- cars
lmn_cars <- lapply(dt, min)
smn_cars <- sapply(dt, min)
lmn_cars

Saída:

## $speed
## [1] 4
## $dist
## [1] 2
smn_cars

Saída:

## speed  dist 
##     4     2
lmxcars <- lapply(dt, max)
smxcars <- sapply(dt, max)
lmxcars

Saída:

## $speed
## [1] 25
## $dist
## [1] 120
smxcars

Saída:

## speed  dist 
##    25   120

Podemos usar uma função integrada do usuário em lapply() ou sapply(). Criamos uma função chamada avg para calcular a média do mínimo e do máximo do vetor.

avg <- function(x) {  
  ( min(x) + max(x) ) / 2}
fcars <- sapply(dt, avg)
fcars

saída

## speed  dist
##  14.5  61.0

Sapply em R é mais eficiente que lapply() na saída retornada porque sapply() armazena valores diretamente em um vetor. No próximo exemplo, veremos que nem sempre é esse o caso.

Podemos somarmariVeja a diferença entre apply(), sapply() e `lapply() no seguintewing tabela:

função Argumentos Objetivo Entrada saída
Aplique aplicar(x, MARGEM, DIVERSÃO) Aplicar uma função às linhas ou colunas ou a ambas Quadro de dados ou matriz vetor, lista, matriz
lapidar lapplicar (X, DIVERTIDO) Aplicar uma função a todos os elementos da entrada Lista, vetor ou quadro de dados Lista
vivamente aplicar (X, DIVERTIDO) Aplicar uma função a todos os elementos da entrada Lista, vetor ou quadro de dados vetor ou matriz

Vetor de fatia

Podemos usar lapply() ou sapply() intercambiáveis ​​para fatiar um quadro de dados. Criamos uma função, Below_average(), que pega um vetor de valores numéricos e retorna um vetor que contém apenas os valores que estão estritamente acima da média. Comparamos ambos os resultados com a função idêntica().

below_ave <- function(x) {  
    ave <- mean(x) 
    return(x[x > ave])
}
dt_s<- sapply(dt, below_ave)
dt_l<- lapply(dt, below_ave)
identical(dt_s, dt_l)

Saída:

## [1] TRUE

função taply()

tocar() calcula uma medida (média, mediana, mínimo, máximo, etc.) ou uma função para cada variável de fator em um vetor. É uma função muito útil que permite criar um subconjunto de um vetor e depois aplicar algumas funções a cada subconjunto.

tapply(X, INDEX, FUN = NULL)
Arguments:
-X: An object, usually a vector
-INDEX: A list containing factor
-FUN: Function applied to each element of x

Parte do trabalho de um cientista de dados ou pesquisador é calcular a somamaries de variáveis. Por exemplo, meça a média ou agrupe os dados com base em uma característica. A maioria dos dados é agrupada por ID, cidade, países e assim por diante. Somamarizing over group revela padrões mais interessantes.

Para entender como funciona, vamos usar o conjunto de dados iris. Este conjunto de dados é muito famoso no mundo do aprendizado de máquina. O objetivo deste conjunto de dados é prever a classe de cada uma das três espécies de flores: Sépala, Versicolor, Virginica. O conjunto de dados coleta informações para cada espécie sobre seu comprimento e largura.

Como trabalho anterior, podemos calcular a mediana do comprimento para cada espécie. Tapply em R é uma maneira rápida de realizar esse cálculo.

data(iris)
tapply(iris$Sepal.Width, iris$Species, median)

Saída:

##     setosa versicolor  virginica 
##        3.4        2.8        3.0