This may be elementary, but I can't find an answer: How can I set up global options for some specific arguments to functions in a package which can be easily changed by the user? This question relates to the selection of colors used in functions in several packages (heplots, genridge), where I want to provide reasonable default values for plots, but allow users to change those defaults globally for all plots produced with my functions. One solution is to use palette() for the default, as in foo <- function(x, col=palette(), ...) {} but the standard palette is not appropriate for my use, and I'd rather not hijack more typical uses Another is to use an explicit list of colors for default, as in bar <- function(x, col=c('red', 'blue', 'brown', 'darkgreen', ...), ...) {} but this must be overridden each time by someone to wants to change the defaults. options() seems like the way to go, but I'm not sure how to implement this. If I use a .onLoad function to set some options, will these be created in the global environment? If not, how to make them so? .onLoad <- function() { options(heplot.colors c("red", "blue", "black", "darkgreen", "darkcyan","magenta", "brown","darkgray")) } My function could then use foo <- function(x, getOption("heplot.colors"), ...) {} -- Michael Friendly Email: friendly AT yorku DOT ca Professor, Psychology Dept. York University Voice: 416 736-5115 x66249 Fax: 416 736-5814 4700 Keele Street Web: http://www.datavis.ca Toronto, ONT M3J 1P3 CANADA
Have you considered the lattice package? The defaults can be accessed/changed via trellis.par.get(), but also passed as arguments into the functions. Kevin On Thu, May 10, 2012 at 8:59 AM, Michael Friendly <friendly at yorku.ca> wrote:> This may be elementary, but I can't find an answer: How can I set up global > options for > some specific arguments to functions in a package which can be easily > changed by the user? > > This question relates to the selection of colors used in functions in > several packages (heplots, > genridge), where I want to provide reasonable default values for plots, but > allow users to > change those defaults globally for all plots produced with my functions. > > One solution is to use palette() for the default, as in > > foo <- function(x, col=palette(), ...) ?{} > but the standard palette is not appropriate for my use, and I'd rather not > hijack more typical uses > > Another is to use an explicit list of colors for default, as in > > bar <- function(x, col=c('red', 'blue', 'brown', 'darkgreen', ...), ...) ?{} > but this must be overridden each time by someone to wants to change the > defaults. > > options() seems like the way to go, but I'm not sure how to implement this. > ?If I use > a .onLoad function to set some options, will these be created in the global > environment? > If not, how to make them so? > > .onLoad <- function() { > ?options(heplot.colors > ?c("red", "blue", "black", "darkgreen", "darkcyan","magenta", > "brown","darkgray")) > } > > My function could then use > > foo <- function(x, getOption("heplot.colors"), ...) ?{} > > > -- > Michael Friendly ? ? Email: friendly AT yorku DOT ca > Professor, Psychology Dept. > York University ? ? ?Voice: 416 736-5115 x66249 Fax: 416 736-5814 > 4700 Keele Street ? ?Web: ? http://www.datavis.ca > Toronto, ONT ?M3J 1P3 CANADA > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel-- Kevin Wright
On May 10, 2012, at 9:59 AM, Michael Friendly wrote:> This may be elementary, but I can't find an answer: How can I set up global options for > some specific arguments to functions in a package which can be easily changed by the user? > > This question relates to the selection of colors used in functions in several packages (heplots, > genridge), where I want to provide reasonable default values for plots, but allow users to > change those defaults globally for all plots produced with my functions. > > One solution is to use palette() for the default, as in > > foo <- function(x, col=palette(), ...) {} > but the standard palette is not appropriate for my use, and I'd rather not hijack more typical uses > > Another is to use an explicit list of colors for default, as in > > bar <- function(x, col=c('red', 'blue', 'brown', 'darkgreen', ...), ...) {} > but this must be overridden each time by someone to wants to change the defaults. > > options() seems like the way to go, but I'm not sure how to implement this. If I use > a .onLoad function to set some options, will these be created in the global environment? > If not, how to make them so? > > .onLoad <- function() { > options(heplot.colors > c("red", "blue", "black", "darkgreen", "darkcyan","magenta", "brown","darkgray"))You certainly don't want to do that - it would override user's setting and thus defeat the whole purpose of options.> } > > My function could then use > > foo <- function(x, getOption("heplot.colors"), ...) {} >You can always do that: foo <- function(x, heplot.colors = getOption("heplot.colors"), ...) { if (is.null(heplot.colors)) heplot.colors <- c("red", "blue", "black", "darkgreen", "darkcyan","magenta", "brown","darkgray") Cheers, Simon> > -- > Michael Friendly Email: friendly AT yorku DOT ca > Professor, Psychology Dept. > York University Voice: 416 736-5115 x66249 Fax: 416 736-5814 > 4700 Keele Street Web: http://www.datavis.ca > Toronto, ONT M3J 1P3 CANADA > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > >