Vektorisierter ifelse()
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 48 von 64.
if prüft eine Bedingung. Bei einem Vektor mit mehreren Werten bricht es mit dem Fehler the condition has length > 1 ab. ifelse(test, yes, no) arbeitet elementweise und gibt ein Ergebnis pro Element zurück:
temps <- c(12, 25, 31, 18)
print(ifelse(temps > 20, "warm", "cool"))Ausgabe:
[1] "cool" "warm" "warm" "cool"yes und no können Vektoren gleicher Länge sein, sodass jedes Element seinen eigenen berechneten Wert erhalten kann:
price <- c(40, 120, 75)
final <- ifelse(price > 100, price * 0.9, price)
print(final)Ausgabe:
[1] 40 108 75Verschachtle ifelse()-Aufrufe für mehr als zwei Ergebnisse. Die Bedingungen werden für jedes Element der Reihe nach geprüft:
scores <- c(95, 72, 48, 81)
grade <- ifelse(scores >= 90, "A", ifelse(scores >= 70, "B", "C"))
print(grade)Ausgabe:
[1] "A" "B" "C" "B"ifelse() ist nützlich für eine neue Spalte eines Data Frames, in der jede Zeile ihre eigene Bezeichnung benötigt:
df <- data.frame(item = c("tea", "oil"), stock = c(0, 8))
df$status <- ifelse(df$stock == 0, "sold out", "available")
print(df)Ausgabe:
item stock status
1 tea 0 sold out
2 oil 8 availableAufgabe
EinfachVervollständige shipping(weights). Gib die Versandkosten für jedes Paket zurück, verbunden mit , : Pakete bis zu 1 kg kosten 4, bis zu 5 kg kosten 9, und schwerere Pakete kosten 2 pro kg. Verwende ifelse(), keine Schleife.
Der bereitgestellte Code liest die Gewichte als durch Kommas getrennte Zeile ein und gibt den zurückgegebenen Wert aus.
Probier es selbst
shipping <- function(weights) {
# Schreibe deinen Code hier
""
}
# Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
cat(shipping(as.numeric(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 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