R apply(), lapply(), sapply(), tapply() avec des exemples

Ce tutoriel vise ร  prรฉsenter la collection de fonctions apply(). La fonction apply() est la plus basique de toutes les collections. Nous apprendrons รฉgalement sapply(), lapply() et tapply(). La collection apply peut รชtre considรฉrรฉe comme un substitut ร  la boucle.

La collection apply() est fournie avec trรจs essentiel paquet si vous installer R avec Anaconda. La fonction apply in R peut รชtre alimentรฉe par de nombreuses fonctions pour effectuer une application redondante sur une collection d'objets (trame de donnรฉes, liste, vecteur, etc.). Le but de apply() est principalement dโ€™รฉviter les utilisations explicites de constructions de boucles. Ils peuvent รชtre utilisรฉs pour une liste dโ€™entrรฉe, une matrice ou un tableau et appliquer une fonction. N'importe quelle fonction peut รชtre passรฉe dans apply().

fonction appliquer()

appliquer() prend une trame de donnรฉes ou une matrice comme entrรฉe et donne une sortie sous forme de vecteur, de liste ou de tableau. Appliquer fonction dans R est principalement utilisรฉ pour รฉviter les utilisations explicites de constructions de boucles. C'est la plus basique de toutes les collections pouvant รชtre utilisรฉe sur des matrices.

Cette fonction prend 3 arguments :

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>

L'exemple le plus simple consiste ร  additionner une matrice sur toutes les colonnes. Le code apply(m1, 2, sum) appliquera la fonction somme ร  la matrice 5ร—6 et renverra la somme de chaque colonne accessible dans l'ensemble de donnรฉes.

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

Sortie :

Exemple de fonction Apply() dans R
Exemple de fonction apply() dans R

Meilleure pratique : stockez les valeurs avant de les imprimer sur la console.

fonction lapply()

appliquer() La fonction est utile pour effectuer des opรฉrations sur des objets de liste et renvoie un objet de liste de mรชme longueur que l'ensemble d'origine. lappy() renvoie une liste de longueur similaire ร  celle de l'objet de liste d'entrรฉe, dont chaque รฉlรฉment est le rรฉsultat de l'application de FUN ร  l'รฉlรฉment correspondant de la liste. Lapply dans R prend une liste, un vecteur ou une trame de donnรฉes en entrรฉe et donne une sortie dans la liste.

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

l dans lapply() signifie liste. La diffรฉrence entre lapply() et apply() rรฉside dans le retour de sortie. Le rรฉsultat de lapply() est une liste. lapply() peut รชtre utilisรฉ pour d'autres objets comme les blocs de donnรฉes et les listes.

La fonction lapply() nโ€™a pas besoin de MARGIN.

Un exemple trรจs simple peut รชtre de changer la valeur de chaรฎne dโ€™une matrice en minuscules avec la fonction tolower. Nous construisons une matrice avec le nom des films cรฉlรจbres. Le nom est au format majuscule.

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

Sortie :

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

Nous pouvons utiliser unlist() pour convertir la liste en vecteur.

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

Sortie :

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

fonction sapply()

appliquer() la fonction prend une liste, un vecteur ou une trame de donnรฉes en entrรฉe et donne une sortie en vecteur ou matrice. Il est utile pour les opรฉrations sur les objets de liste et renvoie un objet de liste de mรชme longueur que l'ensemble d'origine. La fonction Sapply dans R fait le mรชme travail que la fonction lapply() mais renvoie un vecteur.

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

Nous pouvons mesurer la vitesse minimale et nous arrรชterping distances des voitures par rapport ร  l'ensemble de donnรฉes sur les voitures.

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

Sortie :

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

Sortie :

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

Sortie :

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

Sortie :

## speed  dist 
##    25   120

Nous pouvons utiliser une fonction intรฉgrรฉe ร  l'utilisateur dans lapply() ou sapply(). Nous crรฉons une fonction nommรฉe avg pour calculer la moyenne du minimum et du maximum du vecteur.

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

Sortie

## speed  dist
##  14.5  61.0

Sapply dans R est plus efficace que lapply() dans la sortie renvoyรฉe car sapply() stocke les valeurs directement dans un vecteur. Dans lโ€™exemple suivant, nous verrons que ce nโ€™est pas toujours le cas.

Nous pouvons rรฉsumer la diffรฉrence entre apply(), sapply() et `lapply() dans le tableau suivant :

Fonction Arguments Objectif Entrรฉe Sortie
vous inscrire appliquer (x, MARGE, FUN) Appliquer une fonction aux lignes ou aux colonnes ou aux deux Trame de donnรฉes ou matrice vecteur, liste, tableau
s'appliquer lapply(X, AMUSANT) Appliquer une fonction ร  tous les รฉlรฉments de l'entrรฉe Liste, vecteur ou bloc de donnรฉes liste
sรจve appliquer (X, AMUSANT) Appliquer une fonction ร  tous les รฉlรฉments de l'entrรฉe Liste, vecteur ou bloc de donnรฉes vecteur ou matrice

Vecteur de tranche

Nous pouvons utiliser lapply() ou sapply() interchangeables pour dรฉcouper une trame de donnรฉes. Nous crรฉons une fonction, Below_average(), qui prend un vecteur de valeurs numรฉriques et renvoie un vecteur qui ne contient que les valeurs strictement supรฉrieures ร  la moyenne. Nous comparons les deux rรฉsultats avec la fonction identique().

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)

Sortie :

## [1] TRUE

fonction tapply()

tapoter() calcule une mesure (moyenne, mรฉdiane, min, max, etc.) ou une fonction pour chaque variable factorielle dans un vecteur. C'est une fonction trรจs utile qui vous permet de crรฉer un sous-ensemble d'un vecteur puis d'appliquer certaines fonctions ร  chacun des sous-ensembles.

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

Une partie du travail d'un data scientist ou d'un chercheur consiste ร  calculer des rรฉsumรฉs de variables. Par exemple, mesurez la moyenne ou les donnรฉes de groupe en fonction d'une caractรฉristique. La plupart des donnรฉes sont regroupรฉes par identifiant, ville, pays, etc. La synthรจse par groupe rรฉvรจle des modรจles plus intรฉressants.

Pour comprendre comment cela fonctionne, utilisons l'ensemble de donnรฉes iris. Cet ensemble de donnรฉes est trรจs connu dans le monde du machine learning. Le but de cet ensemble de donnรฉes est de prรฉdire la classe de chacune des trois espรจces de fleurs : Sepal, Versicolor, Virginica. L'ensemble de donnรฉes collecte des informations pour chaque espรจce sur leur longueur et leur largeur.

Comme travail prรฉalable, nous pouvons calculer la mรฉdiane de la longueur pour chaque espรจce. Tapply dans R est un moyen rapide d'effectuer ce calcul.

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

Sortie :

##     setosa versicolor  virginica 
##        3.4        2.8        3.0

Rรฉsumez cet article avec :