Definieren Sie alle Funktionen in einer .R-Datei und rufen Sie sie aus einer anderen .R-Datei auf. Wie, wenn möglich?

92

Wie rufe ich Funktionen auf, die in der Datei abc.R in einer anderen Datei definiert sind, z. B. xyz.R?

Eine zusätzliche Frage ist, wie ich in abc.R definierte Funktionen über die R-Eingabeaufforderung / Befehlszeile aufrufe.

G Shah
quelle

Antworten:

136

Sie können aufrufen, source("abc.R")gefolgt von source("xyz.R")(vorausgesetzt, beide Dateien befinden sich in Ihrem aktuellen Arbeitsverzeichnis.

Wenn abc.R ist:

fooABC <- function(x) {
    k <- x+1
    return(k)
}

und xyz.R ist:

fooXYZ <- function(x) {
    k <- fooABC(x)+1
    return(k)
}

dann wird das funktionieren:

> source("abc.R")
> source("xyz.R")
> fooXYZ(3)
[1] 5
> 

Auch wenn es zyklische Abhängigkeiten gibt, funktioniert dies.

ZB Wenn abc.R dies ist:

fooABC <- function(x) {
    k <- barXYZ(x)+1
    return(k)
}

barABC <- function(x){
    k <- x+30
    return(k)
}

und xyz.R ist dies:

fooXYZ <- function(x) {
    k <- fooABC(x)+1
    return(k)
}

barXYZ <- function(x){
    k <- barABC(x)+20
    return(k)
}

dann,

> source("abc.R")
> source("xyz.R")
> fooXYZ(3) 
[1] 55
>
A_K
quelle
9
Eine Nuance: Sie müssen sourceeine Datei / Funktion nur einmal verwenden. Dann befindet es sich in Ihrem Arbeitsbereich und Sie können es jederzeit verwenden. Wenn Sie es ändern, müssen Sie es neu beschaffen. Wenn sich Ihre Funktionen seit der Konvertierung des Codes stark ändern, fügen Sie sie alle in eine Datei ein und beziehen Sie das Ganze jedes Mal. Sie könnten auch eine separate kleinere Datei haben, die 1. die größere Sammlung von Funktionen bezieht und 2. Ihre Testfälle ausführt. In R gibt es viele Möglichkeiten, Ihren Arbeitsablauf zu ordnen.
Bryan Hanson
5
Danke für die Nuance, Bryan. Ich habe dies als zwei Szenarien demonstriert, über die sich die meisten Leute aus prozeduralen Sprachen wundern könnten. Es ist, als ob die Dateien bearbeitet wurden, um die zyklische Abhängigkeit hinzuzufügen. In diesem Fall müssen sie (wie gezeigt) mit Ressourcen ausgestattet werden, und die Zyklen wirken sich nicht auf die Beschaffung der Dateien aus.
A_K
Ich danke Ihnen beiden. @A_K: Vielen Dank, dass Sie das Problem der zyklischen Abhängigkeit hervorgehoben haben. Ersparte mir einige Stunden beim Durchstöbern der R-Dokumentation "Kann verbessert werden" :)
G Shah