R apply(), lapply(), sapply(), tapply() com exemplos

โšก Resumo Inteligente

As funรงรตes apply(), lapply(), sapply() e tapply() formam a famรญlia apply do R, uma alternativa vetorizada aos loops explรญcitos que aplica uma funรงรฃo escolhida em matrizes, listas, vetores e dados agrupados para retornar resultados concisos.

  • ๐Ÿ”ฒ aplicar(): Executa uma funรงรฃo sobre as linhas ou colunas de uma matriz.
  • ๐Ÿ“‹ lapply(): Aplica uma funรงรฃo a cada elemento da lista e retorna uma lista.
  • ๐Ÿ“Š sapply(): Semelhante ร  funรงรฃo lapply(), mas simplifica a saรญda para um vetor.
  • ๐Ÿ—‚๏ธ tapply(): Aplica uma funรงรฃo a grupos definidos por um fator.
  • ๐Ÿค– Assistรชncia de IA: A IA sugere o uso de cรณdigo de aplicaรงรฃo vetorizado em vez de loops lentos.

aplicar, aplicar em excesso, aplicar em excesso e aplicar em excesso em R

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() รฉ principalmente 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 รฉ usado 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

Melhor prรกtica: Armazene os valores antes de imprimi-los no console.

funรงรฃo lapply()

lapidar() A funรงรฃo รฉ รบtil para realizar 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 parar.ping Distรขncias dos carros no 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 resumir a diferenรงa entre apply(), sapply() e `lapply() na tabela a seguir:

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 resumos 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. Resumir o grupo 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

Perguntas Frequentes

As funรงรตes apply nem sempre sรฃo mais rรกpidas que os laรงos for; sua principal vantagem รฉ um cรณdigo conciso e legรญvel. Operaรงรตes vetorizadas em vetores inteiros geralmente sรฃo mais rรกpidas que ambas.

A funรงรฃo `vapply()` funciona como `sapply()`, mas impรตe um tipo de retorno por seguranรงa, enquanto `mapply()` รฉ uma versรฃo multivariada que aplica uma funรงรฃo a vรกrios vetores simultaneamente.

Ambas aplicam uma funรงรฃo a cada elemento de uma lista ou vetor. `lapply()` sempre retorna uma lista, enquanto `sapply()` simplifica o resultado para um vetor quando possรญvel.

Sim. Os assistentes de IA podem converter loops em chamadas apply ou sapply, sugerir a funรงรฃo adequada para seus dados e explicar argumentos como MARGIN e FUN.

As ferramentas de IA geram cรณdigo R, recomendam funรงรตes de aplicaรงรฃo vetorizadas, detectam erros e resumem resultados, ajudandoping Os analistas processam os quadros de dados mais rapidamente e com menos erros.

Resuma esta postagem com: