Re: [Rd] Re-attaching a package environment drops the attributes

From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>
Date: Tue, 18 Sep 2007 09:38:24 +0100 (BST)

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

______________________________________________
R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Tue 18 Sep 2007 - 08:42:08 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 19 Sep 2007 - 06:41:53 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.