Fonctions anonymes
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 27 sur 64.
En R, une fonction est une valeur comme un nombre ou une chaîne de caractères. function(x) x * 2 crée une fonction sans lui donner de nom, et la valeur de sa dernière expression est celle qu’elle renvoie :
double <- function(x) x * 2
print(double(21))
print((function(x) x + 1)(9))Résultat :
[1] 42
[1] 10R 4.1 a ajouté une forme abrégée : \(x) signifie la même chose que function(x). Utilisez des accolades lorsque le corps nécessite plusieurs lignes :
square <- \(x) x^2
label <- function(x) {
size <- if (x > 10) "big" else "small"
paste(x, "is", size)
}
print(square(4))
print(label(12))Sortie :
[1] 16
[1] "12 is big"Comme les fonctions sont des valeurs, une liste peut en contenir plusieurs sous différents noms. ops[["inc"]] est une fonction, donc ops[["inc"]](5) l'appelle :
ops <- list(inc = \(x) x + 1, neg = \(x) -x)
print(ops[["inc"]](5))
print(names(ops))Sortie :
[1] 6
[1] "inc" "neg"Une fonction peut accepter plusieurs arguments et attribuer des valeurs par défaut à certains d’entre eux, exactement comme une fonction nommée :
area <- \(w, h = w) w * h
print(area(3))
print(area(3, 5))Résultat :
[1] 9
[1] 15Défi
FacileComplétez la liste ops avec trois fonctions anonymes à un argument :
doublerenvoie l’argument multiplié par 2squarerenvoie l’argument multiplié par lui-mêmenegaterenvoie l’argument avec son signe inversé
Le code fourni lit le nom d’une opération et un nombre, appelle cette fonction depuis ops et affiche le résultat.
Essayez vous-même
ops <- list(
# Écrivez votre code ici
double = function(x) x
)
# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
f <- ops[[input[1]]]
cat(f(as.numeric(input[2])), 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