Warnungen und finally
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 54 von 64.
Eine Warnung meldet ein Problem, ohne die Ausführung zu stoppen: Die Funktion gibt einen Wert zurück, und R gibt die Warnung am Ende aus. as.numeric() warnt bei Text, der keine Zahl ist, und gibt NA zurück:
x <- as.numeric("abc")
print(x)Ausgabe:
[1] NA
Warning message:
NAs introduced by coercion Wie Fehler werden auch Warnungen an den Fehlerstream gesendet und führen daher auf Coddy zum Fehlschlagen eines Tests. suppressWarnings() unterdrückt sie, wenn du das Ergebnis selbst überprüfst, und tryCatch(..., warning = ) wandelt eine Warnung in einen Wert um:
x <- suppressWarnings(as.numeric("abc"))
print(is.na(x))
r <- tryCatch(as.numeric("abc"), warning = function(w) paste("warned:", conditionMessage(w)))
print(r)Ausgabe:
[1] TRUE
[1] "warned: NAs introduced by coercion"warning("message") löst eine Warnung aus deinem eigenen Code aus. Ein Handler dafür funktioniert genauso wie einer für einen Fehler:
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)Ausgabe:
[1] "b is zero, returning Inf"finally = ... wird nach dem Ausdruck und jedem Handler ausgeführt, unabhängig davon, ob ein Fehler aufgetreten ist oder nicht. Verwende es für Arbeiten, die immer ausgeführt werden müssen, beispielsweise eine Abschlussmeldung:
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))Ausgabe:
finished 2
[1] 20
finished -1
[1] NAAufgabe
EinfachVervollständige to_numbers(texts). Wandle jeden Text in eine Zahl um. Werte, die nicht umgewandelt werden können, werden zu NA, ohne dass eine Warnung ausgegeben wird. Gib zwei Zeilen zurück: Numbers: mit den umgewandelten, durch Leerzeichen verbundenen Zahlen (einschließlich der NA-Werte) und Invalid: mit der Anzahl der Werte, bei denen die Umwandlung fehlgeschlagen ist.
Der bereitgestellte Code liest die Texte als durch Kommas getrennte Zeile ein und gibt jede zurückgegebene Zeile aus.
Probier es selbst
to_numbers <- function(texts) {
# Schreibe deinen Code hier
c("Numbers: ", "Invalid: 0")
}
# Mitgelieferter Ein-/Ausgabecode: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
cat(to_numbers(strsplit(input[1], ",")[[1]]), sep = "\n")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik und Ablaufsteuerung
1Strings im Detail
Teilstrings mit substr()Formatierung mit sprintf()Aufteilen und VerbindenStrings durchsuchenText ersetzenWiederholung – Benutzernamen-Generator4Matrizen
Matrizen erstellenMatrizen indizierenZusammenfassungen von Zeilen und SpaltenMatrizenarithmetikRückblick – Sitzplan10Fortgeschrittener Kontrollfluss
Die switch()-FunktionVektorisierter ifelse()repeat und breakRekursive FunktionenRückblick – Notenklassifizierung2Schlüssel-Wert-Suchen
Benannte Vektor-SuchenSchlüssel prüfenSchlüssel hinzufügen und entfernenNamen durchlaufenRückblick – Aktienübersicht5Projekt – Notenbuch
Schüler hinzufügenNoten eintragen8Sortieren und Gruppieren
Vektoren sortierenNach einem Schlüssel sortierenGruppieren mit split()GruppenzusammenfassungenRückblick – Rangliste11Fehlerbehandlung
Fehler mit stop() auslösenMit tryCatch() abfangenWarnungen und finallyEingaben validierenZusammenfassung – Sicherer Rechner3Mengen und Zählen
Eindeutige WerteMengenoperationenZugehörigkeitstestsZählen mit table()Rückblick – Gäste einer Veranstaltung6Funktionen als Werte
Anonyme FunktionenFunktionen übergebenFunktionen zurückgebenClosures mit ZustandRückblick – Rabattregeln9Datenrahmen
Datenrahmen erstellenSpalten und ZeilenZeilen filternHinzufügen und SortierenZusammenfassung – Verkaufsbericht12Projekt – Ausgaben-Tracker
Ausgaben erfassenGesamtausgabenÜbe selbstständig: Online-R-Compiler