Die switch()-Funktion
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 47 von 64.
switch(x, name = value, ...) vergleicht den Text x mit den Namen und gibt den Wert des passenden Namens zurück. Es ersetzt eine lange Kette von else if-Vergleichen mit derselben Variable:
size <- "m"
price <- switch(size, s = 2.5, m = 3, l = 3.5)
print(price)Ausgabe:
[1] 3Ein letzter Wert ohne Namen ist der Standardwert, der verwendet wird, wenn nichts übereinstimmt. Ohne einen Standardwert gibt ein nicht übereinstimmendes switch() unsichtbar NULL zurück:
day <- "fri"
print(switch(day, sat = "rest", sun = "rest", "work"))
print(is.null(switch("x", a = 1)))Ausgabe:
[1] "work"
[1] TRUEEin leerer Wert fällt auf den nächsten zurück, sodass mehrere Namen ein Ergebnis teilen können:
kind <- function(day) switch(day, sat = , sun = "weekend", "weekday")
print(kind("sun"))
print(kind("tue"))Ausgabe:
[1] "weekend"
[1] "weekday"Die Werte können ganze Codeblöcke in geschweiften Klammern sein, und das Ergebnis ist der letzte Ausdruck des ausgeführten Blocks:
area <- function(shape, a, b = a) {
switch(shape,
square = a^2,
rect = a * b,
circle = {
r <- a / 2
round(pi * r^2, 2)
},
NA)
}
print(area("rect", 3, 4))
print(area("circle", 10))Ausgabe:
[1] 12
[1] 78.54Aufgabe
EinfachVervollständige calculate(a, op, b). op ist entweder plus, minus, times oder over. Gib das Ergebnis der Anwendung auf a und b zurück oder bei jedem anderen op unknown operation. Eine Division durch null gibt cannot divide by zero zurück.
Der bereitgestellte Code liest a, op und b (jeweils eine Zeile) ein und gibt den zurückgegebenen Wert aus.
Probier es selbst
calculate <- function(a, op, b) {
# Schreibe deinen Code hier
"unknown operation"
}
# Mitgelieferter Ein-/Ausgabecode: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
cat(calculate(as.numeric(input[1]), input[2], as.numeric(input[3])), 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