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 anschließend verfügbar:
# Greeting.R
greeting <- function(name) {
paste0("Hello, ", name, "!")
}
# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")Beim Ausführen von main.R wird Hello, Ada! ausgegeben: Die Zeile source() lädt greeting(), bevor main.R sie aufruft.
Das Programm beginnt in der Datei, die du ausführst, hier main.R, und R liest sie Zeile für Zeile. Die Reihenfolge ist wichtig: Eine Funktion existiert erst, nachdem die Datei, in der sie definiert ist, eingelesen wurde. Deshalb gehören die source()-Zeilen an den Anfang:
# main.R
cat(greeting("Ada"), "\n") # Error: could not find function "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n") # funktioniert: greeting() existiert jetztDas übliche Layout besteht aus einer Klasse pro Datei, benannt nach der Klasse: Account.R enthält den account-Konstruktor und seine Methoden, Shape.R enthält die shape-Generics. In den Aufgaben dieses Abschnitts kommt dein Code in diese Dateien, und main.R enthält den bereitgestellten Eingabe-/Ausgabecode, wobei die source()-Zeilen bereits oben in der richtigen Reihenfolge stehen. Der Editor zeigt jede Datei als Tab an.
Shape.R # Generics, die von jeder Form geteilt werden: zuerst sourcen
Circle.R # die Circle-Klasse und ihre Methoden
main.R # source("Shape.R"); source("Circle.R"); liest Eingabe, gibt Ergebnisse aussource() führt eine Datei in der globalen Umgebung aus, sodass ihre Funktionen und Variablen zu globalen Namen werden. R kennt keine dateiprivaten Namen: Wenn zwei Dateien helper() definieren, gewinnt die Datei, die zuletzt eingebunden wurde. Ein Wert in einer eigenen Zeile in einer eingebundenen Datei wird ebenfalls nicht ausgegeben. Daher rufen Dateien, die etwas anzeigen sollen, cat() auf:
# Tools.R
total <- 0 # eine globale Variable, sobald sie gesourced wurde
42 # wird von source() nicht ausgegeben
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # später gesourced: ersetzt den helper obenAufgabe
EinfachDas Programm besteht aus zwei Dateien. main.R lädt Greeting.R, liest Namen ein und gibt für jeden das Ergebnis von greeting(name) aus. Vervollständige greeting() in Greeting.R, sodass für den Namen Ada Hello, Ada! zurückgegeben wird oder Hello, friend!, wenn der Name leer ist.
Dein Code gehört in Greeting.R. main.R enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
source("Greeting.R")
# Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
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