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

Índice:

Anonim

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