From spinuvit.list at gmail.com  Fri Oct 22 19:20:39 2010
From: spinuvit.list at gmail.com (Vitally S.)
Date: Fri, 22 Oct 2010 19:20:39 +0200
Subject: [Rd] new.env does not recognize parents from
	subclassesof	"environment"
In-Reply-To: <4CC077BC.5050209@stanford.edu> (John Chambers's message of "Thu, 
	21 Oct 2010 10:26:20 -0700")
References: <cpnwrpdgod9.fsf@gmail.com> <4CBF2514.8050409@stanford.edu>
	<cpnzku71qpq.fsf@gmail.com>
	<77EB52C6DD32BA4D87471DCD70C8D7000393EF21@NA-PA-VBE03.na.tibco.com>
	<4CC077BC.5050209@stanford.edu>
Message-ID: <cpnvd4u16vs.fsf@gmail.com>


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



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