Thanks for the response, Martin. While the solutions offered update the object appropriately, we wouldn't get the desired return value (a string followed by the counter, "unique_1") when the methods are called. Do you know a way of dealing with this?
Jeff. Martin Morgan wrote: > > Hi Jeff -- > > two different scenarios are to overwrite the current object, along the > lines of > > y <- uniquify(y) > > where uniquify is a method like createUniqueName but returns the > (modified) instance rather than unique name > > setMethod('uniquify', 'MyMatrix', function(x) { > [EMAIL PROTECTED] <- # something unique > x > }) > > The second is a replacement method, along the lines of > > setGeneric("uniqueCount<-", > function(x, ..., value) standardGeneric("uniqueCount<-")) > > setReplaceMethod("uniqueCount", > signature=c(x="MyMatrix", value="numeric"), > function(x, ..., value) { > [EMAIL PROTECTED] <- value > x > }) > > uniqueCount(x) <- uniqueCount(x) + 1 > x # now modified > > This is untested psuedo-code, so I hope it's right enough to get you > going. > > Martin > > Jeffrey Spies <[EMAIL PROTECTED]> writes: > >> Howdy all, >> >> I have a problem that I'd like some advice/help in solving---it has to do >> with R's pass-by-value system. I understand the issue, but am wondering >> if >> anyone has found a working solution in dealing with it for cases when one >> wants to modify an object inside of a method, specifically when working >> with >> S4. I'm aware that R.oo is able to deal with this using S3, but I'd >> really >> rather stick to S4. >> >> The basics of what I would like to do are coded below: >> >> setClass("MyMatrix", >> representation( >> parameters="matrix", >> uniqueCount="numeric" >> ), >> prototype( >> parameters=matrix(numeric(0),0,0), >> uniqueCount=1 >> ) >> ) >> >> setGeneric("createUniqueName", function(object) >> standardGeneric("createUniqueName")) >> >> setMethod("createUniqueName", "MyMatrix", function(object){ >> retval <- paste("unique_", [EMAIL PROTECTED], sep="") >> [EMAIL PROTECTED] <- [EMAIL PROTECTED] + 1 >> return(retval) >> }) >> >> x <- new("MyMatrix", parameters=matrix(0, 2, 2)) >> createUniqueName(x) # returns "unique_1" >> x # [EMAIL PROTECTED] is still 1 >> >> I understand why this is happening, but am wondering how people in the >> community have dealt with it, specifically when using S4. Any advice >> would >> be appreciated. Also, I am aware that this is somewhat of a silly >> example, >> but it should allow you to see what I'm trying to accomplish. >> >> Thank you, >> >> Jeff. >> > -- View this message in context: http://www.nabble.com/S4-pass-by-value-work-around--tp17997553p18012246.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.