Avertissements et finally
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 54 sur 64.
Un avertissement signale un problème sans interrompre l’exécution : la fonction renvoie une valeur et R affiche l’avertissement à la fin. as.numeric() émet un avertissement pour le texte qui n’est pas un nombre et renvoie NA :
x <- as.numeric("abc")
print(x)Sortie :
[1] NA
Warning message:
NAs introduced by coercion Comme les erreurs, les avertissements sont envoyés vers le flux d’erreurs ; sur Coddy, ils font donc échouer un test. suppressWarnings() les réduit au silence lorsque vous vérifiez vous-même le résultat, et tryCatch(..., warning = ) transforme un avertissement en valeur :
x <- suppressWarnings(as.numeric("abc"))
print(is.na(x))
r <- tryCatch(as.numeric("abc"), warning = function(w) paste("warned:", conditionMessage(w)))
print(r)Résultat :
[1] TRUE
[1] "warned: NAs introduced by coercion"warning("message") déclenche un avertissement depuis votre propre code. Un gestionnaire pour celui-ci fonctionne de la même manière que pour une erreur :
ratio <- function(a, b) {
if (b == 0) warning("b is zero, returning Inf")
a / b
}
r <- tryCatch(ratio(1, 0), warning = function(w) conditionMessage(w))
print(r)Sortie :
[1] "b is zero, returning Inf"finally = ... s’exécute après l’expression et tout gestionnaire, qu’une erreur se soit produite ou non. Utilisez-le pour les opérations qui doivent toujours avoir lieu, comme un message de fermeture :
load <- function(x) {
tryCatch({
if (x < 0) stop("negative")
x * 10
}, error = function(e) NA,
finally = cat("finished", x, "\n"))
}
print(load(2))
print(load(-1))Sortie :
finished 2
[1] 20
finished -1
[1] NADéfi
FacileComplétez to_numbers(texts). Convertissez chaque texte en nombre. Les valeurs qui ne peuvent pas être converties deviennent NA sans qu’aucun avertissement ne soit affiché. Retournez deux lignes : Numbers: avec les nombres convertis séparés par des espaces (y compris les valeurs NA), et Invalid: avec le nombre de valeurs qui ont échoué.
Le code fourni lit les textes sous forme de ligne séparée par des virgules et affiche chaque ligne renvoyée.
Essayez vous-même
to_numbers <- function(texts) {
# Écrivez votre code ici
c("Numbers: ", "Invalid: 0")
}
# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(to_numbers(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 notes8Trier et regrouper
Trier des vecteursTrier selon une cléRegrouper avec split()Synthèses des groupesRécapitulatif - Classement11Gestion des erreurs
Lever des erreurs avec stop()Intercepter avec tryCatch()Avertissements et finallyValider les entréesRécapitulatif - Calculatrice sécurisée3Ensembles 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