理工系研究者のための Mac OS X, Windows, Linux メモ
 
ホーム >> UNIX >> R >> Rのクラス
このエントリーをはてなブックマークに追加

Rのクラス(R5クラス)

作成日:2014.4.25
環境:R 3.0.3

〈→現在はR6クラスを推奨〉

Rのクラスの定義方法はS言語での実装を取り入れる形でS3クラスからS4クラスと進化して,現在はR5クラスと呼ばれるものが利用できます。 R5クラスはRのバージョン2.12から導入されましたが,それ以降も少しずつ変化しています。 ここではRのバージョン3で利用できるR5クラスについて紹介します。

クラスを定義するにはsetRefClass関数を用います。 クラスの名称を第1引数に与えて、クラスのメンバ変数はfields変数に、クラスのメンバ関数をmethods変数にそれぞれ与えます。

setRefClass("Book", # クラス名
  fields=list( # メンバ変数の定義
    m.title="character", # 変数名=データ型 
    m.author="character",
    m.isUsed="logical"
  ),
  methods=list( #メンバ関数(メソッド)の定義
    initialize=function(isUsed=TRUE){ # コンストラクタ 
      m.title <<- "Relativity" # メンバ変数へのアクセスは「<<-」を用いる
      m.author <<- "A. Einstein"
      m.isUsed <<- isUsed
    },
    showStatus=function(){ # メンバ関数
      cat("Auther:",m.author,", ","Title:",m.title,", ")
      cat("Used book?:", m.isUsed,"\n")
    }
  )
)
クラス名の定義はClass="Book"のように書くこともできます。

メンバ変数はリストとして「変数名=データ型」の組み合わせでfieldsに与えます。 メンバ関数はリストとして「関数名=function(引数){関数本体}」を必要なだけ記述します。 この時、initializeという関数を作成するとコンストラクタになり、finalizeという関数を作成するとデストラクタになります。

メンバ関数の定義のときに,関数の定義と同じように「<-」を用いることはできません。 必ず「=」を使います。エラーにはならないが不正な結果になります。

クラスのオブジェクトを作成するには、new関数を用います。 第一引数に上記setRefClassで指定したクラス名を与え、第二引数以降にinitialize関数に与える引数を指定します。

Bookクラスのオブジェクトjbookを作成して,メンバ関数の動作を確認してみます。

  1. jbook<-new("Book", isUsed=FALSE)
  2. jbook$m.author <- "S. Natsume" # メンバ変数へのアクセスは「\$」を使う
  3. jbook$m.title <- "I am a cat."
  4. jbook$showStatus()
Auther: S. Natsume ,  Title: I am a cat. , Used book?: FALSE

関連するページ

参考サイト・参考文献