[Rd] new.env does not recognize parents from subclassesof "environment"

Uwe Ligges ligges at statistik.tu-dortmund.de
Sat Oct 23 17:08:05 CEST 2010


Looks like those ETH pages were nnot updated after the R-2.12.0 release 
(they do not show current R-tached / R-devel), hence CCing Martin Maechler.

Best,
Uwe Ligges





On 22.10.2010 21:54, Vitally S. wrote:
>
>
>
> John Chambers<jmc4 at stanford.edu>  writes:
>
>>   You need to update your version of R (r-devel or 2.12 patched) to rev
>> 53385 or later, and read NEWS, particularly the line:
>>
>> - Assignment of an environment to functions or as an attribute to other
>> objects now works for subclasses of "environment".
>>
>
> I am following the news in daily snapshots from here
> ftp://ftp.stat.math.ethz.ch/Software/R
> and  the above line is still not in the NEWS of today's version.
>
> Thanks for the patch. Looking forward to the stable release.
>
> Vitally.
>
>> On 10/22/10 10:20 AM, Vitally S. wrote:
>>> Yet another inconsistency. environment<- does not work with S4:
>>>
>>>
>>>> setClass("myenv", contains = "environment")
>>> [1] "myenv"
>>>> env<- new("myenv")
>>>> tf<- function(x){x}
>>>> environment(tf)<- env
>>> Error in environment(tf)<- env :
>>>    replacement object is not an environment
>>>
>>>
>>> Vitally.
>>>
>>>
>>> John Chambers<jmc4 at stanford.edu>  writes:
>>>> This is a problem related to the introduction of exact= into the [[ and [[<- functions. As Bill says, the
>> current
>>>> method misuses eval.parent() when that argument is added.
>>>>
>>>> However, a simpler and more efficient solution is to migrate the checks for subclasses of "environment" used in
>>>> other base code into the code for [[<- (and for $<-), at which point the methods for these functions are no
>> longer
>>>> needed.
>>>>
>>>> A solution on these lines is being tested now and will find its way into r-devel and 2.12 patched.
>>>>
>>>> One other point about the original posting:
>>>>
>>>> Please don't use constructions like env at .xData. This depends on the current implementation and is not part of
>> the
>>>> user-level definition. Use as(env, "environment") or equivalent. (In this case, the assignment of the object's
>> own
>>>> environment was irrelevant to the error.)
>>>>
>>>> John Chambers
>>>>
>>>> On 10/21/10 9:21 AM, William Dunlap wrote:
>>>>> The traceback looks very similar to a problem
>>>>> in R 2.11.1 reported earlier this month by Troy Robertson.
>>>>>     >   From: r-devel-bounces at r-project.org
>>>>>     >   [mailto:r-devel-bounces at r-project.org] On Behalf Of Troy Robertson
>>>>>     >   Sent: Wednesday, October 06, 2010 6:13 PM
>>>>>     >   To: 'r-devel at R-project.org'
>>>>>     >   Subject: Re: [Rd] Recursion error after upgrade to
>>>>>     >   R_2.11.1[Sec=Unclassified]
>>>>> It was due to a miscount of how many frames to go
>>>>> up before evaluating an expression in
>>>>> getMethod("[[<-",".environment") because setMethod()
>>>>> introduced a local function in the new method.
>>>>>
>>>>> Bill Dunlap
>>>>> Spotfire, TIBCO Software
>>>>> wdunlap tibco.com
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: r-devel-bounces at r-project.org
>>>>>> [mailto:r-devel-bounces at r-project.org] On Behalf Of Vitally S.
>>>>>> Sent: Thursday, October 21, 2010 9:00 AM
>>>>>> To: John Chambers
>>>>>> Cc: r-devel at r-project.org
>>>>>> Subject: Re: [Rd] new.env does not recognize parents from
>>>>>> subclassesof "environment"
>>>>>>
>>>>>>
>>>>>>
>>>>>> Here is an infinite recursion error  which occurs only with S4
>>>>>> subclasses assignment.
>>>>>>
>>>>>>    setClass("myenv", contains = "environment")
>>>>>> #[1] "myenv"
>>>>>>    env<- new("myenv")
>>>>>>    env[[".me"]]<- ∑
>>>>>> #Error: evaluation nested too deeply: infinite recursion /
>>>>>> options(expressions=)?
>>>>>>
>>>>>>
>>>>>> With basic types it works as expected:
>>>>>>
>>>>>> env1<- new.env()
>>>>>> env1[[".me"]]<- env1
>>>>>>
>>>>>> May be this is related to active bindings that you mentioned,
>>>>>>    but I am still
>>>>>> reporting it here.
>>>>>>
>>>>>> Vitally.
>>>>>>
>>>>>>
>>>>>>>    Thanks for the report.  Should now be fixed in r-devel and
>>>>>> 2.12 patched (rev 53383).
>>>>>>> Please do report any cases where a subclass of environment
>>>>>> doesn't work.  There are some known cases in locking and
>>>>>>> active binding, that will be fixed in due course.
>>>>>>>
>>>>>>> The workaround for any such problem is usually as.environment().
>>>>>>>
>>>>>>> On 10/20/10 3:17 AM, Vitaly S. wrote:
>>>>>>>> Dear Developers,
>>>>>>>>
>>>>>>>> A lot has been changed in the R12.0 with respect to
>>>>>> behavior of "environment"
>>>>>>>> subclasses.  Many thanks for that.
>>>>>>>>
>>>>>>>> One small irregularity, though; new.env does not allow the
>>>>>> parent to be from S4
>>>>>>>> subclass.
>>>>>>>>
>>>>>>>>
>>>>>>>>> setClass("myenv", contains="environment")
>>>>>>>> [1] "myenv"
>>>>>>>>> new.env(parent=new("myenv"))
>>>>>>>> Error in new.env(parent = new("myenv")) : 'enclos' must be
>>>>>> an environment
>>>>>>>> I wonder if this is a "planed" behavior.
>>>>>>>>
>>>>>>>> The use of .xData  slot obviously works:
>>>>>>>>> new.env(parent=new("myenv")@.xData)
>>>>>>>> <environment: 063bb9e8>
>>>>>>>> Thanks,
>>>>>>>> Vitaly.
>>>>>>>>
>>>>>>>> ______________________________________________
>>>>>>>> R-devel at r-project.org mailing list
>>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-devel>>>  ______________________________________________
>>>>>> R-devel at r-project.org mailing list
>>>>>> https://stat.ethz.ch/mailman/listinfo/r-devel>>>>  ______________________________________________
>>>> R-devel at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-devel>  ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list