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 :

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
