2016-04-25 14 views
0

Dies scheint etwas zu sein, das vorher gefragt wurde, aber ich kann es nicht finden.Funktion/globale Variable nur beim ersten Lauf definieren

Ich habe eine R-Datei, die mit dem Code zum Definieren von Funktionen als globale Variablen und Laden von Bibliotheken beginnt. Viele von ihnen. Ich möchte diese nur laufen lassen, wenn sie vorher nicht gelaufen sind. wird der Auftrag:

zur Definition globaler Variablen
if (!require(rockchalk)) {library(rockchalk)} 

Gibt es etwas ähnlich:

Für Bibliotheken, der folgende Code (How can I tell if a certain package was already installed? hier)? Als Beispiel möchte ich den folgenden Code möchte nur einmal ausgeführt (und nicht jedes Mal, wenn ich die gesamte Datei erneut ausgeführt):

rowShift <- function(x, shiftLen = 1L) { 
    r <- (1L + shiftLen):(length(x) + shiftLen) 
    r[r<1] <- NA 
    return(x[r]) 
} 
+0

Eine Kombination von '<< -' und 'exists' vielleicht. – TheComeOnMan

+0

Es könnte für einige Leute einfacher sein, eine Lösung vorzuschlagen, wenn wir ein klareres Bild davon hätten, warum Sie so etwas überhaupt machen wollen. – joran

+0

'wenn (! Require (rockchalk)) library (rockchalk)' ist eine sinnlose Zeile. 'require()' wird versuchen, das Paket zu laden (mit mehr oder weniger der gleichen Methode wie 'library()'), also sagt das eigentlich nur "versuche mit laden zu laden, wenn das nicht funktioniert, versuch es Laden mit Bibliothek ". Ich kenne keine Situation, in der eine Ladung mit "require" fehlschlagen würde, aber eine Ladung mit 'library()' würde gelingen. Du bist besser dran, wenn du einfach und klar mit 'library (rockchaclk)' redest. Es ist schlau genug, das Paket nicht erneut anzubringen, wenn es bereits angehängt ist. – Gregor

Antwort

0
if (! exists(x = "rowShift")) {rowShift <- ...} 
Verwandte Themen