[R] Set values in namespaces
Prof Brian Ripley
ripley at stats.ox.ac.uk
Mon Jan 5 14:40:58 CET 2004
On Mon, 5 Jan 2004, Thomas Stabla wrote:
> I want to use global variables in a package which is using a namespace.
> But I don`t know how to change the values of the global variables.
>
> I know how to get the value of the variables, e.g.
>
> > base::pi
> [1] 3.141593
>
> but following code doesn`t work
>
> > base::pi <- 3.14
> Error: Object "base" not found
Base is a special case, and
assign("pi", 3.14, envir=NULL)
will do this (although please don't).
All other namespaces are sealed, so you will get something like
> library(MASS)
> assign("lda", pi, pos=2)
Error in assign("lda", pi, pos = 2) : can't change value of a locked binding
Now, that attempts to change the export, and not the value in the
namespace, so there is a question of which you want and why you want to
change it. (Changing the value in the namespace does not change the
export, which is a copy, but as _both_ the namespace and exports
environments are sealed, this would not matter much.)
There are ways around this and if you peruse the R sources you will find
them. For example, grid sets up an environment in its namespace for its
global variables, and in R-devel there is assignInNamespace().
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list