Re: [Rd] Active bindings in attached environments

From: Jeffrey Horner <jeffrey.horner_at_gmail.com>
Date: Thu, 05 Nov 2009 12:15:55 -0600

On Thu, Nov 5, 2009 at 12:02 PM, Romain Francois <romain.francois_at_dbmail.com
> wrote:

> Also, active bindings on the search path seem to do only half of the job:
>
> > e <- new.env()
> > attach( e )
> > makeActiveBinding( "x", function(val) if(missing(val)) "get" else "set",
> as.environment(2) )
> > x
> [1] "get"
> > x <- 3
> > x
> [1] 3
>
>
No, that just assigned to x in your globalenv(). You want to call assign('x',val,e) or x <<- 3.

Jeff

> Romain
>
>
> On 11/05/2009 05:54 PM, Romain Francois wrote:
>
>>
>>
>> I think it is related to the call to duplicate in do_attach:
>>
>> defineVar(TAG(p), duplicate(CAR(p)), s);
>>
>> You can circumvent it by using "importIntoEnv", as in:
>>
>> > e
>> <environment: 0x9070064>
>> > e <- new.env()
>> > makeActiveBinding('x',function() 'foo',e)
>> > f <- new.env()
>> > attach( f, pos = 2 )
>> > .Internal(importIntoEnv( as.environment(2), ls(e), e, ls(e) ))
>> NULL
>> > x
>> [1] "foo"
>>
>> Romain
>>
>> On 11/05/2009 04:53 PM, Jeffrey Horner wrote:
>>
>>>
>>> Hi,
>>>
>>> Is this expected behavior for active bindings in attached
>>> environments, or is this a bug:
>>>
>>> e<- new.env()
>>>> makeActiveBinding('x',function() 'foo',e)
>>>> ls(e)
>>>>
>>> [1] "x"
>>>
>>>> attach(e)
>>>> search()
>>>>
>>> [1] ".GlobalEnv" "e" "package:graphics"
>>> [4] "package:grDevices" "package:datasets" "package:utils"
>>> [7] "package:methods" "Autoloads" "package:base"
>>>
>>>> x
>>>>
>>> function() 'foo'
>>>
>>> Should this print 'foo' ? The following works as I would expect:
>>>
>>> with(e,x)
>>>>
>>> [1] "foo"
>>>
>>> but this doesn't:
>>>
>>> f<- function() x
>>>> f()
>>>>

>>> function() 'foo'
>>>
>>> However, changing the environment of f does:
>>>
>>> environment(f)<- e
>>>> f()
>>>>
>>> [1] "foo"
>>>
>>>
>>> Jeff
>>>
>>
>>
>
> --
> Romain Francois
> Professional R Enthusiast
> +33(0) 6 28 91 30 30
> http://romainfrancois.blog.free.fr
> |- http://tr.im/BcPw : celebrating R commit #50000
> |- http://tr.im/ztCu : RGG #158:161: examples of package IDPmisc
> `- http://tr.im/yw8E : New R package : sos
>
>

-- 
http://biostat.mc.vanderbilt.edu/JeffreyHorner

	[[alternative HTML version deleted]]

______________________________________________
R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Thu 05 Nov 2009 - 18:19:04 GMT

This archive was generated by hypermail 2.2.0 : Thu 05 Nov 2009 - 18:20:20 GMT