Menu
Coddy logo textTech

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 jetzt

Das ü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 aus

source() 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 oben
challenge icon

Aufgabe

Einfach

Das 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 = "")
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-R-Compiler