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 para o loop.
A coleção apply () é empacotada com o pacote essencial r se você instalar R com Anaconda. A função apply () pode ser alimentada com muitas funções para executar aplicações redundantes em uma coleção de objetos (data frame, list, vector, etc.) O objetivo de apply () é principalmente evitar o uso explícito 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 ().
Neste tutorial, você aprenderá
- função apply ()
- função lapply ()
- função sapply ()
- Vetor de fatia
- função tapply ()
função apply ()
apply () pega o quadro de dados ou matriz como uma entrada e fornece a saída em vetor, lista ou array. A função apply () é usada principalmente para evitar o uso explícito de construções de loop. É a mais básica de todas as coleções que pode ser usada sobre uma matriz.
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 aplicar (m1, 2, soma) aplicará a função soma à matriz 5x6 e retornará a soma de cada coluna acessível no conjunto de dados.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Resultado:
Prática recomendada: armazene os valores antes de imprimi-los no console.
função lapply ()
A função lapply () é útil para realizar operações em objetos de lista e retorna um objeto de lista do mesmo comprimento do conjunto original. lappy () retorna uma lista de comprimento semelhante ao objeto de lista de entrada, cada elemento da qual é o resultado da aplicação de FUN ao elemento correspondente da lista. lapply () recebe lista, vetor ou quadro de dados como entrada e dá saída na 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 de 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 MARGEM.
Um exemplo muito fácil pode ser alterar o valor da string de uma matriz para minúsculas com a função para inferior. Construímos uma matriz com o nome dos famosos filmes. O nome está em formato de caixa alta.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Resultado:
## 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)
Resultado:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
função sapply ()
A função sapply () pega lista, vetor ou quadro de dados como entrada e dá saída em vetor ou matriz. É útil para operações em objetos de lista e retorna um objeto de lista do mesmo comprimento do conjunto original. A função sapply () 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 dos carros.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Resultado:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Resultado:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Resultado:
## $speed## [1] 25## $dist## [1] 120
smxcars
Resultado:
## speed dist## 25 120
Podemos usar uma função interna do usuário em lapply () ou sapply (). Criamos uma função chamada avg para calcular a média do mínimo e máximo do vetor.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Resultado
## speed dist## 14.5 61.0
A função sapply () é mais eficiente do 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 seguinte tabela:
Função |
Argumentos |
Objetivo |
Entrada |
Resultado |
---|---|---|---|---|
Aplique |
aplicar (x, MARGIN, FUN) |
Aplicar uma função às linhas ou colunas ou ambas |
Quadro ou matriz de dados |
vetor, lista, matriz |
lapidar |
lapply (X, FUN) |
Aplica uma função a todos os elementos da entrada |
Lista, vetor ou quadro de dados |
Lista |
vivamente |
sappy (X FUN) |
Aplica 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 os dois 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)
Resultado:
## [1] TRUE
função tapply ()
tapply () 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, em seguida, aplicar algumas funções a cada um do 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 pesquisadores é calcular resumos de variáveis. Por exemplo, meça a média ou os dados do grupo com base em uma característica. A maioria dos dados é agrupada por ID, cidade, países e assim por diante. Resumir sobre 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: Sepal, 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 de cada espécie. tapply () é uma maneira rápida de realizar esse cálculo.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Resultado:
## setosa versicolor virginica## 3.4 2.8 3.0