Chapter 12 S3・S4 クラス

12.1 S3クラス

R の S3 クラスの実体は、オブジェクト属性 class の値に独自の名前が設定されたリストです。 そのため、S3オブジェクトの作成や要素へのアクセスについては List の項を参照してください。

下に S3 のオブジェクトを扱う例として、R の関数lm() の返値を受け取り、学習データにおけるモデルの予測精度の指標として RMSE (Root Mean Square Error; ニ乗平均平方根誤差) を算出する関数の例を示します。

実行例として、R のサンプルデータ mtcars を使って、車の燃費を線形回帰したモデルの RMSE を計算します。

12.2 S4クラス

12.2.1 slot へのアクセス

S4 クラスのオブジェクトのスロットへアクセスするには slot() メンバ関数を用います。また、特定の名前のスロットを持っているかどうか確かめるには hasSlot() メンバ関数を用います。

12.2.2 新しい S4 クラスのオブジェクトを作成する

Rcpp 単体では新しい S4 クラスを定義することができないですが、 R で定義した S4 クラスのオブジェクトを Rcpp で作成することはできます。

次ののコード例では、R で新しい S4 クラス Person を定義して、その後、Rcpp で Person クラスのオブジェクトを作成する例を示します。

まずは S4 クラスの Person を定義します。このクラスは、スロットとして、名前を表す name、誕生日を表す birth を保持しています。

次に Rcpp で Person クラスのオブジェクトを作成し、そのスロットに値を設定します。

実行結果

> rcpp_s4()
An object of class "Person"
Slot "name":
[1] "Sewall Wright"

Slot "birth":
[1] "1889-12-21"