Re: [R] How to change the value of a class slot

From: Ross Boylan <ross_at_biostat.ucsf.edu>
Date: Fri 10 Jun 2005 - 04:56:27 EST

On Wed, 2005-06-08 at 14:15 +0200, Thomas Petzoldt wrote: ...
> Hello Ross,
>
> I see that your question was related to S4, but I just noticed a
> solution based on the R.oo package so I thought I would add a solution
> based on the proto package too. We had similar problems several times
> ago and (to my surprise) found R to be an extremely flexible language
> even for these things. Our favorite solution is available as
> package(proto). It requires R 2.1, because of several subtle
> improvements regarding environments, which made our implementation more
> streamlined.
>
> Does the following example do what you intended?

Certainly looks like it. It seems R has an embarrassment of object systems. R.oo, which someone else mentioned, also has the semantics I was thinking of. There's an interesting paper here http://www.ci.tuwien.ac.at/Conferences/DSC-2003/Proceedings/Bengtsson.pdf which contrasts what I was looking for, which it calls class-object-oriented programming (COOP) with what R does, which it calls functional-object-oriented programming (FOOP).

The paper also notes that call-by-value vs call-by-reference, which is the root of the slot update problem, is really orthogonal to the FOOP/COOP distinction. It's easy to imagine FOOP with call-by-reference. R.oo uses references.

That paper also mentions that Omegahat has on OOP package, which apparently is similar in spirit to R.oo while taking a more low-level approach to the implementation.

Ross

>
> ##=====================================================
> library(proto)
>
> ## 1) define an object
> CompletePathMaker <- proto(
> index = 0,
> bumpIndex = function(., dindex = 1)
> .$index <- .$index + as.integer(dindex)
> )
>
> ## 2) create a child object of CompletePathMaker
> cpm <- CompletePathMaker$proto()
>
> ## 3) set the index component to 3
> cpm$index <- 3
>
> ## 4) iterate the index
> cpm$bumpIndex(2)
>
> ## print the result
> cpm$index
>
> ##=====================================================



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 Received on Fri Jun 10 05:01:22 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:32:28 EST