8章S3

読者は、スロットマシンの出力が私の約束とは異なることに気付かれたかもしれません。私が言ったスロットマシンの出力は次のような形のものでした。

play()
## 0 0 DD
## $0

しかし、現在のマシンは、次のようにちょっと美しくない書式で表示しています。

play()
##  "0"  "0" "DD"
## 0

さらに、スロットマシンはシンボルの表示のために小技を使っています(playの中からprintを呼び出していることです)。そのため、次のように出力を保存すると、賞金だけしか保存されません。

one_play <- play()
## "B" "0" "B"

one_play
## 0

RのS3システムを使えば、この2つの問題を解決できます。

8.1 S3システム

S3は、Rに組み込まれているクラスシステムです。このシステムは、Rが異なるクラスのオブジェクトをどのように扱うかをコントロールしています。一部のR関数は、オブジェクトのS3クラスを問い合わせ、その応答に基づいて異なる動作をします。

print関数もそのような関数の1つです。数値ベクトルを表示しようとすると、printは数値を出力します。

num <- 1000000000
print(num)
## 1e+09

しかし、この数値にS3クラスの"POSIXct" "POSIXt"を与えると、printは時刻を表示します。

class(num) <- c("POSIXct", "POSIXt")
print(num)
## "2001-09-08 19:46:40 CST"

クラスを持つオブジェクトを使うと(今のように)、RのS3システムに行き当たります。S3の動作は最初は奇妙に感じられるかもしれませんが、慣れてしまえば簡単に予測できます。 ...

Get RStudioではじめるRプログラミング入門 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.