Ausgaben erfassen
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 57 von 64.
In diesem Projekt erstellst du einen Ausgaben-Tracker, der Befehle zeilenweise einliest. In fünf Schritten lernst du, Ausgaben zu erfassen, die Gesamtsumme auszugeben, Ausgaben nach Kategorie zu gruppieren, die größten Ausgaben aufzulisten und einen Monat zusammenzufassen. Jeder Schritt erweitert dieselbe tracker(commands)-Funktion.
ADD 2024-05-01 food 12.50
ADD 2024-05-02 rent 500
TOTAL
CATEGORY
TOP 2
MONTH 2024-05Die Ausgaben befinden sich in einem Dataframe mit einer Zeile pro Ausgabe. Er beginnt mit drei leeren Spalten des richtigen Typs, und rbind() fügt für jedes gültige ADD eine Zeile hinzu:
expenses <- data.frame(date = character(0), category = character(0), amount = numeric(0))
expenses <- rbind(expenses, data.frame(date = "2024-05-01", category = "food", amount = 12.5))
print(nrow(expenses))
print(expenses$amount)Ausgabe:
[1] 1
[1] 12.5Eine ADD-Zeile muss vier Teile und einen positiven Betrag enthalten. Wandle den Betrag mit suppressWarnings(as.numeric()) um, damit ein ungültiger Wert NA statt einer Warnung ergibt, und überprüfe ihn dann, bevor du die Zeile hinzufügst:
parts <- strsplit("ADD 2024-05-01 food abc", " ")[[1]]
amount <- suppressWarnings(as.numeric(parts[4]))
print(length(parts) == 4 && !is.na(amount) && amount > 0)Ausgabe:
[1] FALSEAufgabe
EinfachVervollständige tracker(commands) für den ersten Befehl:
ADD <date> <category> <amount>: Wenn die Zeile genau vier Teile enthält und der Betrag eine Zahl größer als 0 ist, füge die Ausgabe hinzu und antworte mitadded <category> <amount>, wobei der Betrag mit zwei Dezimalstellen angegeben wird, zum Beispieladded food 12.50. Andernfalls antworte mitinvalid:, gefolgt vom vollständigen Befehl.
Der bereitgestellte Code übergibt jede Eingabezeile als einen Befehl an tracker() und gibt jede zurückgegebene Antwort in einer eigenen Zeile aus. Datumsangaben werden als YYYY-MM-DD geschrieben, Kategorien sind kleingeschriebene Wörter, und die Eingabe enthält ausschließlich die bisher beschriebenen Befehle.
Probier es selbst
tracker <- function(commands) {
expenses <- data.frame(date = character(0), category = character(0), amount = numeric(0))
replies <- c()
for (cmd in commands) {
parts <- strsplit(cmd, " ")[[1]]
# Schreibe deinen Code hier
}
replies
}
# Bereitgestellter Ein-/Ausgabecode: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), 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