2017-05-18 12 views
6

Paket ayrıldığında bir paket yüklendiğinde ve temizlendiğinde tanımlanmış bir renk kümesine sahip olmak isterim. Bunun ile geldim neBir R paketi yüklendiğinde ve boşaltılarak temizlediğinde bir dizi değişken nasıl temizlenir?

(Bu durumda

.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") 
} 

(I kötülük olduğunu bildiğimiz olan) derin atama dayanır, arsa aşağıdaki oyuncak örnekte gösterilmiştir iş gibi görünüyor seq (1: 4, col = C.1) Çalışıyor Bunu uygulamak için daha iyi veya daha zarif veya daha az tahrip edici bir yol var mı?

+0

Bu, diğer paketlerdeki diğer verilerden nasıl farklıdır? – Dason

cevap

0

: Artık renklerin adıyla erişilebilir

.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() 
} 

, küresel çevre arama listesinde görünmüyor (kötülük bizi kurtaran) ve böylece, ayrıldıkları paket ortamı otomatik olarak ayrıldıkça, çıkarma işleminde manuel olarak temizlenmesi gerekmez.

Bunun avantajı, kullanıcıların artık bir işleve ihtiyaç duymadan doğrudan paletlere doğrudan paletlere erişebilmesidir.

5

Gerçekten de bu belaya gitmek zorunda değilsiniz. Paket yüklendiyse denetler ve uygun renkleri döndürür.

ben öyle istediğiniz şekilde çalışması gibi görünüyor ne
chooseCols <- function() 
{ 
    if("this_package" %in% search()) 
     C.1 
    else # use default colours 
} 

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

Aslında kullanmak istediğimiz 4 renkten oluşan bir palet listesi var. Bu yüzden kullanıcıların palet ismini scale_fill_manual (value = C.3' veya 'arsa (x, y, col = C.7 [2])' gibi çağrılara atamasını istiyoruz. palet adı veya belirli bir rengin adı ve konumu olmak için – Avraham

+0

Bu yaklaşımı istediğiniz herhangi bir karmaşıklığa kolayca genişletebilirsiniz. –

İlgili konular