次の S4 クラスを検討してください。
setClass('Foo', representation(model='data.frame'))
setMethod('initialize', 'Foo',
function(.Object, a, b) {
.Object@model <- data.frame(a, b)
.Object
})
次の方法でインスタンス化できます。
new('Foo', a=1:4, b=4:7)
ここまでは順調ですね。ただし、Foo をサブクラス化しようとすると、エラーが発生します。
setClass('Bar', contains='Foo')
>>> Error in data.frame(a, b) : argument "a" is missing, with no default
個人的には、明示的な引数を使用してクラス Foo をインスタンス化することを好みます。これは、コードがより明示的であるためです。しかし、これは不可能に思えますね。の署名はinitialize
、クラスが持つスロットと一致する必要があるようです。そうでない場合、発生するのを待っている問題です。私が間違っている?