Re: [Rd] S3 vs S4 for a simple package

From: Tim Hesterberg <timh_at_insightful.com>
Date: Mon, 07 Jan 2008 13:36:08 -0800

Would you like existing functions such as mean, range, sum, colSums, dim, apply, length, and many more to operate on the array of numbers? If so use an S3 class.

If you would like to effectively disable such functions, to prevent them from working on the object unless you write a method that specifies exactly how the function should operate on the class, then either use an S4 class, or an S3 class where the array is one component of a list.

An S3 class also allows for flexibility - you can add attributes, or list components, without breaking things.

As for reassurance - I use S3 classes for almost everything, happily. The one time I chose to use an S4 class I later regretted it. This was for objects containing multiple imputations, where I wanted to prevent functions like mean() from working on the original data, without filling in imputations. The regret was because we later realized that in some cases we wanted to add a "call" attribute or component/slot so that update() would work. If it had been an S3 object we could have done so, but as an S4 object we would have broken existing objects of the class.

Tim Hesterberg
Disclaimer - this is my personal opinion, not my employer's.

>I am writing a package and need to decide whether to use S3 or S4.
>
>I have a single class, "multipol"; this needs methods for "[" and "[<-"
>and I also need a print (or show) method and methods for arithmetic +-
>*/^.
>
>In S4, an object of class "multipol" has one slot that holds an array.
>
>Objects of class "multipol" require specific arithmetic operations;
>a,b being
>multipols means that a+b and a*b are defined in peculiar ways
>that make sense in the context of the package. I can also add and
>multiply
>by scalars (vectors of length one).
>
>My impression is that S3 is perfectly adequate for this task, although
>I've not yet finalized the coding.
>
>S4 seems to be "overkill" for such a simple system.
>
>Can anyone give me some motivation for persisting with S4?
>
>Or indeed reassure me that S3 is a good design decision?



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Mon 07 Jan 2008 - 21:37:56 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 08 Jan 2008 - 12:30:08 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive