[R] help with oop in R - class structure and syntex

Duncan Murdoch
Tue, 05 Feb 2008 13:45:10 -0000

On 2/5/2008 8:21 AM, tom soyer wrote:
> Hi,
>
> I read section 5, oop, of the R lang doc, and I am still not sure I
> understand how to build a class in R for oop. I thought that since I
> understand the oop syntex of Java and VB, I am wondering if the R
programmig
> experts could help me out by comparing and contrasting the oop syntex in R
> with that of Java. For example, the basic class structure in Java is like
> this:
>
> public class Bicycle {
>
>     // *the Bicycle class has three fields*
>     public int cadence;
>     public int gear;
>     public int speed;
>
>     // *the Bicycle class has one constructor*
>     public Bicycle(int startCadence, int startSpeed, int startGear) {
>         gear = startGear;
>         cadence = startCadence;
>         speed = startSpeed;
>     }
>
>     // *the Bicycle class has four methods*
>     public void setCadence(int newValue) {
>         cadence = newValue;
>     }
>
>     public void setGear(int newValue) {
>         gear = newValue;
>     }
>
>     public void applyBrake(int decrement) {
>         speed -= decrement;
>     }
>
>     public void speedUp(int increment) {
>         speed += increment;
>     }
>
> }
>
> Could one of the R experts please illustrate the R class syntex for writing
> the R equivalent of the Java Bicycle class above?

The class system in standard R has no equivalent of that.  It's based on
a different idea:  the generic function owns methods, classes don't.

Another problem is that there are two different class systems in R:
sometimes calls S3 and S4 (because of the versions of S where they were
introduced).  You were reading about S3.

Duncan Murdoch


>
> Also, in Java, inheritance is done like this:
>
> public class MountainBike extends Bicycle {
>
>     // *the MountainBike subclass has one field*
>     public int seatHeight;
>
>     // *the MountainBike subclass has one constructor*
>     public MountainBike(int startHeight, int startCadence, int startSpeed,
> int startGear) {
>         super(startCadence, startSpeed, startGear);
>         seatHeight = startHeight;
>     }
>
>     // *the MountainBike subclass has one method*
>     public void setHeight(int newValue) {
>         seatHeight = newValue;
>     }
>
> }
>
> What would be the R oop syntex for inheritance in the case of the
> MontainBike class?
>
> Thanks!
>