如何在R包加载时清晰地定义一组变量并在卸载时清除它们?

时间:2017-05-18 19:35:14

标签: r r-package

我希望在包加载时定义一组颜色,并在包分离时清除。

我提出的似乎有用的内容显示在以下玩具示例中,该示例依赖于深度分配(我知道邪恶

#A one-liner solution
df['vals'] = df.assign(res = 30-df.vals.cumsum()).apply(lambda x: 0 if x.res>0 else x.vals if abs(x.res)>x.vals else x.vals-abs(x.res), axis=1)

df
Out[96]: 
   vals
0     0
1     0
2     0
3     5
4    20

在这种情况下,情节(seq(1:4,col = C.1)有效。是否有更好或更优雅或更少潜在破坏性的方式来实现它?

2 个答案:

答案 0 :(得分:5)

你真的不需要去解决所有麻烦。只需定义一个函数来检查包是否已加载,并返回适当的颜色。

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

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

答案 1 :(得分: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()
}

现在可以按名称访问颜色,它们不会显示在全局环境搜索列表中(从邪恶中保存),因此不需要在分离时手动清除它们,因为它们所在的包环境会在分离时自动清除。

这样做的好处是,用户现在可以直接作为变量访问调色板,而无需进行函数调用。