Schlüssel prüfen
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 8 von 64.
Bevor du nach einem Schlüssel suchst, der möglicherweise fehlt, prüfe mit %in%, ob er in den Namen enthalten ist:
stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))Ausgabe:
[1] TRUE
[1] FALSEEin if um die Suche herum liefert einen Standardwert für einen fehlenden Schlüssel statt eines NA oder eines Fehlers:
stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)Ausgabe:
[1] 0Ein vorhandener Schlüssel mit dem Wert 0 unterscheidet sich von einem fehlenden Schlüssel: pears ist bekannt und out of stock, plums wird überhaupt nicht verkauft.
Listen verwenden dieselbe Prüfung mit %in% names(). Ein fehlender Name in einer Liste gibt NULL statt eines Fehlers zurück, daher funktioniert auch is.null():
user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))Ausgabe:
[1] TRUE
[1] TRUEEine kleine Hilfsfunktion sorgt dafür, dass die Prüfung an einer Stelle bleibt, wenn ein Programm viele Schlüssel nachschlägt:
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))Ausgabe:
[1] 12
[1] 0Aufgabe
EinfachVervollständige stock_status(stock, item). Gib unknown zurück, wenn item kein Schlüssel von stock ist, out of stock, wenn sein Wert 0 ist, und andernfalls in stock: gefolgt von der Menge.
Der bereitgestellte Code liest den Lagerbestand als durch Kommas getrennte name=quantity-Paare ein, dann den Artikel und gibt den zurückgegebenen Wert aus.
Probier es selbst
stock_status <- function(stock, item) {
# Schreibe deinen Code hier
""
}
# Vorgegebener Eingabe-/Ausgabecode: Lass ihn unverändert
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")
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 eintragen3Mengen 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