>>>>> "Ross" == Ross Boylan <[EMAIL PROTECTED]> >>>>> on Fri, 03 Jun 2005 17:04:08 -0700 writes:
Ross> I defined an S4 class with a slot i. Then I wrote a regular function Ross> that attempted to increment i. Ross> This didn't work, apparently because of the general rule that a function Ross> can't change the values of its arguments outside the function. I gather Ross> there are ways around it, but the Green book admonishes "cheating on the Ross> S evaluation model is to be avoided" (p. 190). Ross> Thinking that class methods needed to an exception to this rule, I then Ross> tried setMethod with the function I had written. However, when I called Ross> the function I got >> setMethod("nextPath", "CompletePathMaker", nextPath) Ross> Creating a new generic function for 'nextPath' in '.GlobalEnv' Ross> [1] "nextPath" >> nextPath(pm) Ross> Error: protect(): protection stack overflow Ross> I can change the value of the slot interactively, so the problem does Ross> not appear to be that the slots are considered off-limits. Ross> What do I need to do to update slot values? Ross> Here are some possibly relevant code fragments Ross> setClass("CompletePathMaker", Ross> representation(i="integer", Ross> timeOffset="numeric", # to avoid 0's Ross> truePaths="TruePaths") Ross> ) Ross> nextPath <- function(pm){ #pm is a CompletePathMaker Ross> [EMAIL PROTECTED] <- [EMAIL PROTECTED](1) Ross> [etc] If your nextPath function has 'pm' as its last statement it will return the updated object, and if you call it as mypm <- nextPath(mypm) you are 1) updating mypm 2) in a proper S way (i.e. no cheating). Regards, Martin Ross> I'm trying to make the class behave like an iterator, with i keeping Ross> track of its location. I'm sure there are more R'ish ways to go, but Ross> I'm also pretty sure I'm going to want to be able to update slots. Ross> Thanks. Ross> Ross Boylan ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html