私は、他の多くのクラスに共通する表現を持つ基本クラス( "A"と呼ぶ)を持っています。継承スロットのS4プロトタイプを定義する方法
したがって、私はこのクラスを含むために "B"のような他のクラスを定義します。私はスロットのデフォルト値が含まれるように、これらの他のクラス(B)のプロトタイプを設定したい
は、私は、これは自然なことだろうと思ったA.から継承:
setClass("A", representation(a="character"))
setClass("B", contains="A", prototype(a = "hello"))
しかし、それはエラーを生成します。
Error in representation[!slots] : object of type 'S4' is not subsettable
これがどうして起こるのかわかりません。
setClass("B", contains="A")
をして、私自身のジェネレータ関数をハック:私は私が行うことができますプロトタイプを省略した場合
new_B <- function(...){
obj <- new("B", ...)
[email protected] = "hello"
obj
}
をしてからnew_B()
とのプロトタイプに基づいて、私のオブジェクトを作成し、それはひどく原油と比べて醜いです一般的な発電機new("B")
を使用して、私のプロトタイプを有することに...
また、 '.A < - setClass(" A "、表現(a ="文字 "))'は '.A()'または '.A(a =" foo ")"ではなく、新しい( "A") 'ではなくコンストラクタとして使用されます。 'A < - ...'ではなく.A < - ... 'を使用します。なぜなら、最終的に' .A() 'を呼び出す名前付き引数などを使ってより正式なコンストラクタを書くことが多いと思うからですライン。 –
@MartinMorganありがとう、素敵なトリック!より正式なコンストラクタの例が '.A()'を使っているのを見て、それをなぜ '' new( "A") '? – cboettig