Arbeiten mit Dateien
Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 1 von 57.
Reale Programme sind auf mehrere Dateien aufgeteilt. In R führt source("Greeting.R") eine andere Datei von oben nach unten aus, und jede Funktion, die diese Datei definiert, ist danach verfügbar:
# Greeting.R
greeting <- function(name) {
paste0("Hello, ", name, "!")
}
# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")Bei der Ausführung von main.R wird Hello, Ada! ausgegeben: Die Zeile source() lädt greeting(), bevor main.R die Funktion aufruft.
Das Programm startet in der Datei, die du ausführst, hier main.R, und R liest sie Zeile für Zeile ein. Die Reihenfolge ist wichtig: Eine Funktion existiert erst, nachdem die Datei mit ihrer Definition eingebunden wurde. Deshalb gehören die source()-Zeilen an den Anfang:
# main.R
cat(greeting("Ada"), "\n") # Fehler: Funktion "greeting" konnte nicht gefunden werden
source("Greeting.R")
cat(greeting("Ada"), "\n") # funktioniert: greeting() existiert jetztDas übliche Layout sieht eine Klasse pro Datei vor, wobei die Datei nach der Klasse benannt wird: Account.R enthält den account-Konstruktor und seine Methoden, Shape.R enthält die shape-Generika. In den Aufgaben dieses Abschnitts kommt dein Code in diese Dateien, und main.R enthält den bereitgestellten Ein-/Ausgabecode, wobei die source()-Zeilen bereits ganz oben in der richtigen Reihenfolge stehen. Der Editor zeigt jede Datei als Tab an.
Shape.R # Generische Funktionen, die von allen Formen gemeinsam verwendet werden: zuerst laden
Circle.R # die Kreis-Klasse und ihre Methoden
main.R # source("Shape.R"); source("Circle.R"); liest Eingaben ein, gibt Ergebnisse aussource() führt eine Datei in der globalen Umgebung aus, sodass ihre Funktionen und Variablen zu globalen Namen werden. R kennt keine dateiinternen Namen: Wenn zwei Dateien helper() definieren, gilt die zuletzt eingelesene Datei. Ein allein stehender Wert in einer eingelesenen Datei wird ebenfalls nicht ausgegeben. Dateien, die etwas anzeigen sollen, rufen daher cat() auf:
# Tools.R
total <- 0 # nach dem Laden eine globale Variable
42 # wird von source() nicht ausgegeben
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # später geladen: ersetzt die obige Funktion helperAufgabe
EinfachDas Programm besteht aus zwei Dateien. main.R bindet Greeting.R ein, liest Namen ein und gibt für jeden das Ergebnis von greeting(name) aus. Vervollständige greeting() in Greeting.R, sodass die Funktion für den Namen Ada Hello, Ada! zurückgibt oder Hello, friend!, wenn der Name leer ist.
Dein Code gehört in Greeting.R. main.R enthält den vorgegebenen Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
source("Greeting.R")
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1S3-Grundlagen
Arbeiten mit DateienListen mit einer KlasseKonstruktorfunktionenPrint- und Format-MethodenValidatoren und HilfsfunktionenRückblick – Temperaturen4Kapselung in R
Closures als ObjekteUmgebungen als ObjekteZugriffsfunktionenZustand schützenRückblick – Parkuhr2S3-Generics und Methoden
Generics und UseMethodStandardmethodenMethoden für Basis-GenericsGrundlagen von NextMethodWiederholung – Flächeninhalte von Formen5S4-Klassen
S4-Klassen definierenSlots und ZugriffGültigkeitsprüfungenShow-MethodenRückblick – Produktkatalog8Referenzklassen
Referenzklassen definierenMethoden und FeldänderungenKopiersemantikVererbung und callSuperZusammenfassung – Aufgabenwarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-R-Compiler