lapply et sapply
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 32 sur 64.
lapply(x, f) appelle f sur chaque élément de x et renvoie les résultats dans une liste, un élément par entrée :
squares <- lapply(1:3, function(i) i^2)
print(length(squares))
print(squares[[3]])Sortie :
[1] 3
[1] 9sapply() fait la même chose et simplifie le résultat : lorsque chaque appel renvoie une valeur, vous obtenez un vecteur simple au lieu d’une liste :
print(sapply(1:3, function(i) i^2))
print(sapply(c(4, 9, 16), sqrt))Sortie :
[1] 1 4 9
[1] 2 3 4Avec un vecteur de caractères, sapply() nomme les résultats d’après les entrées. Ajoutez USE.NAMES = FALSE pour obtenir un vecteur simple :
words <- c("tea", "coffee")
print(sapply(words, nchar))
print(sapply(words, nchar, USE.NAMES = FALSE))Sortie :
tea coffee
3 6
[1] 3 6Ces fonctions remplacent la boucle qui construit un résultat, un élément à la fois. Les deux versions ci-dessous calculent le nombre de voyelles de chaque mot :
words <- c("banana", "sky", "idea")
vowels <- function(w) sum(strsplit(w, "")[[1]] %in% c("a", "e", "i", "o", "u"))
counts <- c()
for (w in words) counts <- c(counts, vowels(w))
print(counts)
print(sapply(words, vowels, USE.NAMES = FALSE))Résultat :
[1] 3 0 3
[1] 3 0 3Défi
FacileComplétez vowel_counts(words). Retournez une ligne par mot, banana: 3, avec le nombre de voyelles (a, e, i, o, u) dans le mot. Utilisez sapply() pour compter les voyelles de tous les mots.
Le code fourni lit les mots sous la forme d’une ligne de mots en minuscules séparés par des virgules et affiche chaque ligne retournée.
Essayez vous-même
vowel_counts <- function(words) {
# Écrivez votre code ici
character(0)
}
# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(vowel_counts(strsplit(input[1], ",")[[1]]), sep = "\n")
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et flux d’exécution
1Les chaînes en profondeur
Sous-chaînes avec substr()Mise en forme avec sprintf()Scinder et joindreRechercher dans les chaînesRemplacer du texteRécapitulatif - Créateur de nom d'utilisateur4Matrices
Créer des matricesIndexer des matricesRécapitulatifs des lignes et des colonnesArithmétique matricielleRécapitulatif - Plan de salle7La famille Apply
lapply et sapplyMap et mapplyFilter et FindReduceRécapitulatif - Pipeline de données10Structures de contrôle avancées
La fonction switch()ifelse() vectorisérepeat et breakFonctions récursivesRécapitulatif – Classificateur de notes2Recherches par clé-valeur
Recherches dans des vecteurs nommésVérifier les clésAjouter et supprimer des clésParcourir les nomsRécapitulatif - Bureau des stocks5Projet - Carnet de notes
Ajouter des élèvesEnregistrer les notes3Ensembles et comptage
Valeurs uniquesOpérations sur les ensemblesTests d’appartenanceCompter avec table()Récapitulatif - Invités à l’événement6Les fonctions comme valeurs
Fonctions anonymesPasser des fonctionsRetourner des fonctionsFermetures avec étatRécapitulatif - Règles de remise9Data Frames
Créer des Data FramesColonnes et lignesFiltrer les lignesAjouter et trierRécapitulatif - Rapport des ventes12Projet - Suivi des dépenses
Enregistrer les dépensesDépenses totalesEntraînez-vous par vous-même : Compilateur R en ligne