Ce didacticiel 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 le package essentiel r si vous installez R avec Anaconda. La fonction apply () peut être alimentée par de nombreuses fonctions pour effectuer une application redondante sur une collection d'objets (bloc de données, liste, vecteur, etc.). Le but de apply () est principalement d'éviter les utilisations explicites des constructions de boucle. Ils peuvent être utilisés pour une liste d'entrée, une matrice ou un tableau et appliquer une fonction. Toute fonction peut être passée dans apply ().
Dans ce tutoriel, vous apprendrez
- fonction apply ()
- fonction lapply ()
- fonction sapply ()
- Vecteur de tranche
- fonction tapply ()
fonction apply ()
apply () prend la trame de données ou la matrice comme entrée et donne la sortie en vecteur, liste ou tableau. apply () Function est principalement utilisée pour éviter les utilisations explicites des constructions de boucle. C'est la plus élémentaire de toutes les collections pouvant être utilisées sur une matrice.
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 sum à la matrice 5x6 et retournera la somme de chaque colonne accessible dans l'ensemble de données.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Production:
Meilleure pratique: stockez les valeurs avant de les imprimer sur la console.
fonction lapply ()
La fonction lapply () est utile pour effectuer des opérations sur des objets de liste et renvoie un objet de liste de la même longueur que l'ensemble d'origine. lappy () renvoie une liste de la même longueur que 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 () prend une liste, un vecteur ou une trame de données comme entrée et donne la 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 () se situe entre le retour de sortie. La sortie 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 célèbres films. Le nom est au format majuscule.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Production:
## 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)
Production:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
fonction sapply ()
La fonction sapply () prend une liste, un vecteur ou une trame de données comme entrée et donne une sortie en vecteur ou en matrice. Il est utile pour les opérations sur les objets de liste et renvoie un objet de liste de la même longueur que l'ensemble d'origine. La fonction sapply () 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 du jeu de données des voitures.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Production:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Production:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Production:
## $speed## [1] 25## $dist## [1] 120
smxcars
Production:
## speed dist## 25 120
Nous pouvons utiliser une fonction intégrée 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
Production
## speed dist## 14.5 61.0
La fonction sapply () 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 |
Saisir |
Production |
---|---|---|---|---|
appliquer |
appliquer (x, MARGE, FUN) |
Appliquer une fonction aux lignes ou aux colonnes ou aux deux |
Trame de données ou matrice |
vecteur, liste, tableau |
paresseux |
lapply (X, FUN) |
Appliquer une fonction à tous les éléments de l'entrée |
Liste, vecteur ou bloc de données |
liste |
sapper |
sappy (X FUN) |
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)
Production:
## [1] TRUE
fonction tapply ()
tapply () calcule une mesure (moyenne, médiane, min, max, etc…) ou une fonction pour chaque variable de facteur 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 regroupez les données en fonction d'une caractéristique. La plupart des données sont regroupées par ID, ville, pays, etc. La synthèse sur le groupe révèle des modèles plus intéressants.
Pour comprendre comment cela fonctionne, utilisons le jeu de données iris. Cet ensemble de données est très connu dans le monde de l'apprentissage automatique. 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 recueille 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 () est un moyen rapide d'effectuer ce calcul.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Production:
## setosa versicolor virginica## 3.4 2.8 3.0