apply(), lapply(), sapply(), tapply() Fonction dans R avec 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

Bonne 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 les distances d'arrêt des voitures à partir de l'ensemble de données des 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 la suitewing table:

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