What does “S3 methods” mean in R?

Most of the relevant information can be found by looking at ?S3 or ?UseMethod, but in a nutshell:

S3 refers to a scheme of method dispatching. If you’ve used R for a while, you’ll notice that there are print, predict and summary methods for a lot of different kinds of objects.

In S3, this works by:

  • setting the class of objects of
    interest (e.g.: the return value of a
    call to method glm has class glm)
  • providing a method with the general
    name (e.g. print), then a dot, and
    then the classname (e.g.:
    print.glm)
  • some preparation has to have been
    done to this general name (print)
    for this to work, but if you’re
    simply looking to conform yourself to
    existing method names, you don’t need
    this (see the help I refered to
    earlier if you do).

To the eye of the beholder, and particularly, the user of your newly created funky model fitting package, it is much more convenient to be able to type predict(myfit, type="class") than predict.mykindoffit(myfit, type="class").

There is quite a bit more to it, but this should get you started. There are quite a few disadvantages to this way of dispatching methods based upon an attribute (class) of objects (and C purists probably lie awake at night in horror of it), but for a lot of situations, it works decently. With the current version of R, newer ways have been implemented (S4 and reference classes), but most people still (only) use S3.

Leave a Comment