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". 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 <j...@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 e...@.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-boun...@r-project.org >>> > [mailto:r-devel-boun...@r-project.org] On Behalf Of Troy Robertson >>> > Sent: Wednesday, October 06, 2010 6:13 PM >>> > To: 'r-devel@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-boun...@r-project.org >>>> [mailto:r-devel-boun...@r-project.org] On Behalf Of Vitally S. >>>> Sent: Thursday, October 21, 2010 9:00 AM >>>> To: John Chambers >>>> Cc: r-devel@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@r-project.org mailing list >>>>>> https://stat.ethz.ch/mailman/listinfo/r-devel>>> >>>>>> ______________________________________________ >>>> R-devel@r-project.org mailing list >>>> https://stat.ethz.ch/mailman/listinfo/r-devel>> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel