S3クラスの効用

わたし一般ユーザーやしRでクラスとか使わんわーよう使わんわーという人、多いと思います。
しかしS3クラスは便利です。
たとえばprint関数の挙動をみてみましょう。
以下はシンプルな因子をprintした例です。

> smp <- factor("a")
> print(smp)
[1] a
Levels: a

この時、実はsmpのクラスであるfactorに応じてprint.factor関数が呼ばれています。
ということは任意のクラスを付与して、それに応じたS3クラスの関数を定義してみるとどうなるでしょう。

> class(smp) <- "tokorosawa"
> print.tokorosawa <- function(x)print("yeahhhhhhhhh!!!!!")
> print(smp)
[1] "yeahhhhhhhhh!!!!!"

オブジェクトには任意のS3クラスを設定でき、それに応じた関数は関数名の後に.classという形で定義できます。

これを応用することで以下の記事のようにswitch代わりにS3が使えたりします。小粋ですね。
http://notchained.hatenablog.com/entry/2015/11/12/011800

ちなみに私もかつてjaguchiパッケージで同じような実装をしました。
https://github.com/dichika/jaguchi/blob/master/R/jaguchi.R

なお、Rのクラスにも色々あり、S3、S4、RC(Reference class、R5という人も)が組み込みで実装されており、外部パッケージだとprotoとかR6というのもあります。
ていうかそもそもS3クラスってC++とかPythonでいうところのクラスぽくない、ちょっと意味がわからない、という人も多いのではないでしょうか。
そんな方はAdvanced Rを読んでください。
どうやら翻訳も出るらしいですよ。

R言語徹底解説

R言語徹底解説