Fehler mit stop() auslösen
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 52 von 64.
stop("message") löst einen Fehler aus: Die Funktion stoppt sofort, nichts danach wird ausgeführt, und R gibt die Nachricht aus. Verwende es, wenn eine Funktion Eingaben erhält, mit denen sie nicht arbeiten kann:
check_qty <- function(q) {
if (q <= 0) stop("quantity must be positive")
q
}
print(check_qty(3))
print(check_qty(-1))
print("never printed")Ausgabe:
[1] 3
Error in check_qty(-1) : quantity must be positive
Calls: print -> check_qty
Execution haltedDer Fehlertext nennt den fehlgeschlagenen Aufruf, und Execution halted bedeutet, dass das gesamte Skript angehalten wurde: Das letzte print() wurde nie ausgeführt. Ein Fehler wird in den Fehlerdatenstrom geschrieben, nicht in die normale Ausgabe, daher schlägt ein Test auf Coddy fehl, wenn ein Fehler oder eine Warnung ausgegeben wird.
stopifnot() prüft mehrere Bedingungen gleichzeitig und löst für die erste Bedingung, die FALSE ist, einen Fehler aus. Eine benannte Bedingung verwendet ihren Namen als Nachricht:
area <- function(w, h) {
stopifnot("width must be positive" = w > 0, "height must be positive" = h > 0)
w * h
}
print(area(2, 3))
print(area(2, -1))Ausgabe:
[1] 6
Error in area(2, -1) : height must be positive
Calls: print -> area -> stopifnot
Execution haltedErstelle die Nachricht aus den Werten mit paste0() oder sprintf(), damit der Leser sieht, was falsch war:
get_item <- function(items, i) {
if (i > length(items)) stop(sprintf("index %d is past the end (%d items)", i, length(items)))
items[i]
}
print(get_item(c("a", "b"), 5))Ausgabe:
Error in get_item(c("a", "b"), 5) : index 5 is past the end (2 items)
Calls: print -> get_item
Execution haltedLöse Fehler am Anfang einer Funktion aus, bevor irgendeine Arbeit erledigt wird. Prüfungen, die frühzeitig abbrechen, halten den Rest der Funktion einfach, da sie von gültigen Eingaben ausgehen kann:
withdraw <- function(balance, amount) {
if (amount <= 0) stop("amount must be positive")
if (amount > balance) stop("insufficient funds")
balance - amount
}Aufgabe
EinfachVervollständige make_order(item, qty, stock). Löse mit stop() einen Fehler aus:
quantity must be at least 1, wennqtykleiner als 1 istonly <stock> left, wennqtygrößer alsstockist, zum Beispielonly 3 left
Gib andernfalls ordered <qty> x <item> zurück.
Der bereitgestellte Code liest den Artikel, die Menge und den Bestand ein, ruft deine Funktion auf und gibt entweder deren Ergebnis oder Error: gefolgt von der Fehlermeldung aus, sodass kein Test jemals den eigenen Fehlertext von R anzeigt.
Probier es selbst
make_order <- function(item, qty, stock) {
# Schreibe deinen Code hier
""
}
# Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
result <- tryCatch(make_order(input[1], as.numeric(input[2]), as.numeric(input[3])),
error = function(e) paste("Error:", conditionMessage(e)))
cat(result, 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