Vérifier les clés
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 8 sur 64.
Avant de rechercher une clé qui pourrait être absente, vérifie si elle figure parmi les noms avec %in% :
stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))Résultat :
[1] TRUE
[1] FALSEUn if autour de la recherche fournit une valeur par défaut lorsqu’une clé est absente, au lieu de renvoyer NA ou une erreur :
stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)Résultat :
[1] 0Une clé qui existe avec la valeur 0 est différente d’une clé absente : pears est connue et out of stock, plums n’est pas du tout vendu.
Les listes utilisent la même vérification %in% names(). Un nom absent d’une liste renvoie NULL plutôt qu’une erreur, donc is.null() fonctionne également :
user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))Résultat :
[1] TRUE
[1] TRUEUn petit utilitaire permet de centraliser la vérification lorsqu’un programme recherche de nombreuses clés :
get_or <- function(x, key, default) {
if (key %in% names(x)) x[[key]] else default
}
stock <- c(apples = 12)
print(get_or(stock, "apples", 0))
print(get_or(stock, "kiwis", 0))Résultat :
[1] 12
[1] 0Défi
FacileComplétez stock_status(stock, item). Renvoyez unknown si item n'est pas une clé de stock, out of stock si sa valeur est 0, et sinon in stock: suivi de la quantité.
Le code fourni lit le stock sous forme de paires name=quantity séparées par des virgules, puis lit l'article et affiche la valeur renvoyée.
Essayez vous-même
stock_status <- function(stock, item) {
# Écrivez votre code ici
""
}
# Code d'entrée/sortie fourni : conservez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
stock <- c()
for (pair in strsplit(input[1], ",")[[1]]) {
kv <- strsplit(pair, "=")[[1]]
stock[kv[1]] <- as.numeric(kv[2])
}
cat(stock_status(stock, 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