La fonction switch()
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 47 sur 64.
switch(x, name = value, ...) compare le texte x avec les noms et renvoie la valeur de celui qui correspond. Il remplace une longue chaîne de comparaisons else if portant sur la même variable :
size <- "m"
price <- switch(size, s = 2.5, m = 3, l = 3.5)
print(price)Résultat :
[1] 3Une dernière valeur sans nom est la valeur par défaut, utilisée lorsque rien ne correspond. Sans valeur par défaut, un switch() sans correspondance renvoie NULL de manière invisible :
day <- "fri"
print(switch(day, sat = "rest", sun = "rest", "work"))
print(is.null(switch("x", a = 1)))Sortie :
[1] "work"
[1] TRUEUne valeur vide passe à la suivante, de sorte que plusieurs noms peuvent partager un résultat :
kind <- function(day) switch(day, sat = , sun = "weekend", "weekday")
print(kind("sun"))
print(kind("tue"))Sortie :
[1] "weekend"
[1] "weekday"Les valeurs peuvent être des blocs entiers de code entre accolades, et le résultat est la dernière expression du bloc qui s’exécute :
area <- function(shape, a, b = a) {
switch(shape,
square = a^2,
rect = a * b,
circle = {
r <- a / 2
round(pi * r^2, 2)
},
NA)
}
print(area("rect", 3, 4))
print(area("circle", 10))Sortie :
[1] 12
[1] 78.54Défi
FacileComplétez calculate(a, op, b). op est l’un de plus, minus, times et over. Retournez le résultat de son application à a et b, ou unknown operation pour toute autre valeur de op. Une division par zéro renvoie cannot divide by zero.
Le code fourni lit a, op et b (un par ligne) et affiche la valeur renvoyée.
Essayez vous-même
calculate <- function(a, op, b) {
# Écrivez votre code ici
"unknown operation"
}
# Code d'entrée/sortie fourni : conservez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(calculate(as.numeric(input[1]), input[2], as.numeric(input[3])), 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