Was Sie anrufen Arbeitsbereich wird genauer als die globale Umgebung bezeichnet.
Funktionen auszuführen, die in ihren eigenen Umgebungen. Dies ist beispielsweise der Grund, warum Sie die in der globalen Umgebung definierten Variablen innerhalb der Funktion nicht sehen. Auch, wie eine Funktion weiß, eine Variable mit dem Namen x
zu verwenden, die im Funktionskörper definiert ist, anstatt einige x
, die Sie möglicherweise in Ihrer globalen Umgebung haben.
Die meisten Funktionen ändern nicht die externen Umgebungen, was gut ist! Es ist das funktionale Programmierparadigma. Funktionen, die Umgebungen ändern, z. B. rm
und source
, verwenden normalerweise Argumente, sodass Sie explizit angeben können, welche Umgebung geändert wird. Wenn Sie bei ?rm
aussehen werden Sie ein envir
Argument sehen, und das Argument ist, das meiste, was sein Einzelheiten Abschnitt beschreibt. source
hat ein local
Argument:
local
- TRUE
, FALSE
oder eine Umgebung, zu bestimmen, wo die analysierten Ausdrücke ausgewertet werden. FALSE
(Standardeinstellung) entspricht den Arbeitsbereich des Benutzers (die globale Umwelt) und TRUE
in die Umgebung, aus der source
genannt wird.
Sie legen explizit local = TRUE
wenn Sie source
nennen, die source
ausdrücklich erzählt die lokale (innerhalb der Funktion) -Umgebung nur zu ändern, so natürlich Ihre globale Umwelt unberührt ist!
Um die Funktionen machen arbeiten, wie ich nehme an, Sie wollen, dass sie, Sie clearWorkSpace
wie dies ändern könnte:
clearWorkSpace <- function() {
rm(list= ls(all=TRUE, envir = .GlobalEnv), envir = .GlobalEnv)
}
Und für loadDependencies
einfach die local = TRUE
löschen.(Oder mehr eingestellt explizit local = FALSE
oder local = .GlobalEnv
) Obwohl Sie könnten neu schreiben sie in einer R-ähnliche Art und Weise:
loadDependencies = function() {
invisible(lapply(list.files(path = "./dependencies", full.names = TRUE), source))
}
für diese beiden (vor allem mit der vereinfachten Abhängigkeit oben ausgeführt) Ich, ob Sie in Frage würde wirklich brauchen diese in Funktionen eingewickelt. Könnte besser sein, R zu bekommen nur die Gewohnheit, einen Neustart, wenn Sie an einem Projekt arbeiten und halten invisible(lapply(list.files(path = "./dependencies", full.names = TRUE), source))
am Anfang des Skripts wieder aufnehmen ...
Weitere Lesung am Umgebungen ist es The Evironments Section of Advanced R. Insbesondere gibt es mehrere Möglichkeiten, Umgebungen anzugeben, die für verschiedene Anwendungsfälle nützlich sein können, anstatt die globale Umgebung fest zu codieren.