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

Gabor Grothendieck ggrothendieck at gmail.com
Tue Feb 5 15:18:46 CET 2008


On Feb 5, 2008 9:09 AM, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> This illustration uses S3.  Note that functions do not modify their arguments
> so to modify an object we have to pass it to the method and then pass the
> object back.  There is also another system called S4 which involves typing
> of arguments and there are packages proto and R.oo which provide different
> OO models.
>
>
> # define constructors for bicycle and mountainBike classes
> Bicycle <- function(cadence, gear, speed) structure(list(cadence =
> cadence, gear = gear, speed = speed), class = "bicycle")
> MountainBike <- function(cadence, gear, speed, seatHeight) {
>   x <- Bicycle(cadence, gear, speed)
>   x$seatHeight <- seatHeight
>   class(x) <- c(class(x), "mountainBike")
>   x
> }
>
> # define generic setCadence and then methods for each class
>
> setCadence <- function(x, cadence) UseMethod("setCadence")
> setCadence.bicycle <- function(x, cadence) { x$cadence <- cadence; x }
>
> # mountBike's setCadence method overrides bicycle's setCadence method
> setCadence.mountBike <- function(x, cadence) { x$cadence <- cadence + 1; x }
>

mountBike should be mountainBike

> # list the setCadence methods avialable
> methods(setCadence)
>
> # define a generic applyBrake and a "bicycle" method
> # mountainBike will inherit the bicycle method by default
> applyBrake <- function(x, decrement) UseMethod("applyBrake")
> applyBrake.bicycle <- function(x, decrement) { x$speed <- x$speed - decrement }
>
> # list the applyBrake methods available
> methods(applyBrake)
>
> b <- Bicycle(1, 2, 3)
> m <- MountainBike(4, 5, 6, 7)
> m <- applyBrake(m, 1)
>
>
>
> On Feb 5, 2008 8:21 AM, tom soyer <tom.soyer at gmail.com> 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?
> >
> > 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!
> >
> > --
> > Tom
> >
> >        [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at 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.
> >
>



More information about the R-help mailing list