2017-05-18 2 views
6

Ich möchte eine Reihe von Farben definiert werden, wenn ein Paket geladen und gelöscht wird, wenn Paket löst.Wie definiert man eine Gruppe von Variablen sauber, wenn ein R-Paket geladen und beim Entladen gelöscht wird?

Was ich damit habe kommen scheint in dem folgende Spielzeug Beispiel wird gezeigt, zu arbeiten, die auf tiefe Zuordnung beruht (was ich weiß böse sein)

.onLoad <- function(libname, pkgname) { 

} 

.registerColors <- function(){ 
    C.1 <<- c("#FF0000FF", "#80FF00FF", "#00FFFFFF", "#8000FFFF") 
    C.2 <<- c("#00AAFFFF", "#0000FFFF", "#AA00FFFF", "#FF00AAFF") 
} 

.onUnload <- function(libpath){ 
} 
.onAttach <- function(libname, pkgname) { 
    .registerColors() 
    packageStartupMessage("Welcome to XYZ") 
} 

.onDetach <- function(libname, pkgname) { 
    rm(C.1, C.2, pos = 1) 
    packageStartupMessage("Buh-bye") 
} 

In diesem Fall Grundstück (seq (1: 4, col = C.1) funktioniert.Es gibt eine bessere oder elegantere oder weniger potenziell destruktive Möglichkeit, dies zu implementieren?

+0

Wie unterscheidet sich das von anderen Daten in anderen Paketen? – Dason

Antwort

0

Was die Art, wie ich es zu wollen, scheint zu funktionieren:

.registerColors <- function(){ 
    assign(x = 'C.1', value = c("#FF0000FF", "#80FF00FF", "#00FFFFFF", "#8000FFFF"), pos = 2) 
    assign(x = 'C.2', value = c("#00AAFFFF", "#0000FFFF", "#AA00FFFF", "#FF00AAFF"), pos = 2) 
} 

.onAttach <- function(libname, pkgname) { 
    .registerColors() 
} 

Nun sind die Farben mit Namen zugänglich sind, sie in der globalen Umwelt-Suchliste nicht angezeigt werden (Einsparung uns von bösen) Daher müssen sie beim Trennen nicht manuell gelöscht werden, da die Paketumgebung, in der sie sich befinden, beim Trennen automatisch gelöscht wird.

Der Vorteil davon ist, dass die Benutzer nun direkt auf die Paletten als Variablen zugreifen können, ohne dass ein Funktionsaufruf erforderlich ist.

5

Sie brauchen nicht wirklich zu all dem Ärger zu gehen. Definieren Sie einfach eine Funktion, die prüft, ob das Paket geladen ist, und gibt die entsprechenden Farben zurück

chooseCols <- function() 
{ 
    if("this_package" %in% search()) 
     C.1 
    else # use default colours 
} 

plot(1:4, col=chooseCols()) 
+0

Ich habe tatsächlich eine Liste von 12 Farbpaletten, jede mit der Länge 4, die wir verwenden wollen. Wir möchten also, dass die Benutzer den Namen der Palette in Aufrufen wie 'scale_fill_manual (Wert = C.3' oder' plot (x, y, col = C.7 [2]) ') zuweisen. Die Wahl des Benutzers wird benötigt Dies ist entweder der Name der Palette oder der Name und der Ort einer bestimmten Farbe – Avraham

+0

Sie können diesen Ansatz auf jede gewünschte Komplexität erweitern. –

Verwandte Themen