How to cleanly define a set of variables when an R package loads and clear them on unload?

Viewed 119

I would like to have a set of colors become defined when a package loads and cleared when package detaches.

What I've come up with that seems to work is shown in the following toy example which relies on deep assignment (which I know to be evil)

.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 this case, plot(seq(1:4, col = C.1) works. Is there a better or more elegant or less potentially destructive way to implement this?

2 Answers
Related