Menu
CoddyTech

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 jetzt

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

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

Aufgabe

Einfach

Das 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 = "")
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