From ggrothendieck at gmail.com  Sun Jan  7 12:46:25 2007
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Sun, 7 Jan 2007 06:46:25 -0500
Subject: [Rd] environmentName
In-Reply-To: <45A0D9C4.2090508@stats.uwo.ca>
References: <971536df0701070201n511119cfh6faae2b5828d445b@mail.gmail.com>
	<45A0D9C4.2090508@stats.uwo.ca>
Message-ID: <971536df0701070346jf142c8di814c131d2397742f@mail.gmail.com>

On 1/7/07, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> On 1/7/2007 5:01 AM, Gabor Grothendieck wrote:
> > I noticed the new environmentName in R 2.5.0dev.  Thus I gather that
> > each environment has:
> >
> > (1) a name
> > (2) a hex value
> >
> > so
> >
> > 1. environmentName gets the name.  Is there any way to set the name?
>
> The NEWS entry says:
>
>     o  New function environmentName() to give the print name of
>        environments such as "namespace:base".
>        This is now used by str().
>
> Take a look at the implementation in src/main/builtin.c.  The name isn't
> part of the environment, this is just derived from how the environment
> is being used.
>
> If you want to attach a label to an environment, use an attribute.  You
> can put an S3 class on an environment if you want it to print your label
> by default rather than use the standard print mechanism.
>
> > 2. is there any way to get the hex value for an environment other than doing:
> >        e <- new.env()
> >        capture.output(e)
>
> Not in R code, but there's no use for it in R code, either.  If you want

The proto package currently uses capture.output, as above, to
get a printable unique identifier for environments:

> library(proto)
> name.proto(new.env())
[1] "0x0195860c"

This is used to display the relationships among environment and proto
objects in graph.proto and str.proto .

It would be nice to be able to get the hex identifier directly rather than
having to go through this indirect method.

> to test for whether two variables refer to the same environment, then
> attach a unique label to the environments when you create them and check
> the labels.

Its possible to assign a name to a proto object but I need to be able to
generate an identifier even if the object does not have a name.



[Rd] environmentName
Gabor Grothendieck