[Rd] Re-attaching a package environment drops the attributes
Prof Brian Ripley
ripley at stats.ox.ac.uk
Tue Sep 18 10:38:24 CEST 2007
Note that attach() has a return value, so you don't need to use
as.environment() on the name.
Do note more carefully that the attribute you added to env _has_ 'been
dropped', so there is nothing special about package environments here.
You seem to believe that you can (re-)attach an actual environment.
However (as the help page says), attach() makes a new environment and
copies the bindings into that environment so the result of attach() is a
different environment which does not inherit any attributes from the
argument to attach(). Nor would it be desirable to do so, for the
attached environment can be altered independently of the argument to
attach().
If you name enviroments to look like packages when they are not you are
likely to break quite a lot of things, and yes, that would be expected.
On Mon, 17 Sep 2007, Henrik Bengtsson wrote:
> Hi.
>
> contrary to other environments, the attributes of a *package*
> environment are dropped (from the new environment) when attach():ing
> it to the search() path. This might or might not be surprising, but
> have some side effects if rearranging/attaching package environments.
>
> # Example - Regular environments
> env <- new.env()
> attr(env, "foo") <- "bar"
> print(env)
> ## <environment: 0x023f3128>
> ## attr(,"foo")
> ## [1] "bar"
> attach(env, pos=2, name="foo", warn.conflicts=FALSE)
> env2 <- as.environment("foo")
> print(env2)
> ## <environment: 0x023f44c4>
> ## attr(,"name")
> ## [1] "foo"
And no "foo" attribute.
>
> # Example - Package environments
> env <- as.environment("package:utils")
> attr(env, "foo") <- "bar"
> print(env)
> ## <environment: package:utils>
> ## attr(,"name")
> ## [1] "package:utils"
> ## attr(,"path")
> ## [1] "C:/PROGRA~1/R/R-2.6.0alpha/library/utils"
> ## attr(,"foo")
> ## [1] "bar"
> attach(env, pos=2, name="package:utils2", warn.conflicts=FALSE)
> env2 <- as.environment("package:utils2")
> print(env2)
> ## <environment: package:utils2>
> ## attr(,"name")
> ## [1] "package:utils2"
>
> This becomes a problem, because the 'path' attribute is dropped causing:
>
> packageDescription("utils2")
> ## Error in if (pkgpath == "") { : argument is of length zero
> sessionInfo()
> ## Error in if (pkgpath == "") { : argument is of length zero
>
> Again, this might or might not expected.
>
> Finally:
>
>> sessionInfo()
> R version 2.6.0 alpha (2007-09-14 r42843)
> i386-pc-mingw32
>
> locale:
> LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
> States.1252;LC_MONETARY=English_United
> States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
> Cheers
>
> Henrik
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
--
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-devel
mailing list