2017-05-18 52 views
6

我希望在軟件包分離時加載和清除軟件包時定義一組顏色。如何在R程序包加載時清除定義一組變量並在卸載時清除它們?

我想出似乎在依賴於深分配(我知道是邪惡

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

在這種情況下,積下的玩具例子顯示工作( seq(1:4,col = C.1)有效,是否有更好或更優雅或更少的潛在破壞性方法來執行此操作?

+0

這與其他任何軟件包中的其他數據有何不同? – Dason

回答

0

似乎什麼工作,我希望它是這樣的:

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

現在的顏色是可以通過名稱訪問,它們不會出現在全球環境中的搜索列表(從邪惡我們節省了) ,因此它們不需要在分離時手動清除,因爲它們所處的包裝環境在分離時自動清除。

這樣做的好處是用戶現在可以直接作爲變量訪問調色板而不需要函數調用。

5

您並不需要去解決所有問題。函數用於檢查程序包是否已加載,並返回相應的顏色。

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

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

我實際上有12個調色板的列表,每個調色板的長度都是4,我們要使用它。所以我們希望用戶在像scale_fill_manual(value = C.3'或'plot(x,y,col = C.7 [2])'這樣的調用中分配調色板的名稱。用戶的選擇需要可以是調色板的名稱,也可以是特定顏色的名稱和位置。 – Avraham

+0

您可以輕鬆地將此方法擴展到所需的任何複雜度。 –

相關問題