2016-09-28 7 views
0

現在、S3動物園オブジェクトを使用する新しいS4クラスを作成しています。私はクラスを作成することができますR S3属性のS4オブジェクトのインスタンス

setOldClass("zoo") 
setClass("rollingSD", slot = c(rollPeriod = "numeric", tsOutput = "zoo")) 

このコードは正常に動作します。オブジェクトを作成したい場合は

riskSD <- new("rollingSD") 

これもうまくいきます。ただし、以下のエラー

riskSD <- new("rollingSD", rollPeriod = 12) 
Error in validObject(.Object) : 
invalid class “rollingSD” object: invalid object for slot "tsOutput" in class 
"rollingSD": got class "S4", should be or extend class "zoo" 

これではない動物園のクラスのデフォルトオブジェクトがinititatedされていない理由を私のための明確なを生成します。私もこれを修正する方法を知らない。

答えて

1

この問題は、Rのクラスメカニズムが新しいzooオブジェクトを作成する方法を知らないために発生します。 some_zoo_objectがクラスzooである

setClass(
    "rollingSD", 
    slot = c(rollPeriod = "numeric", tsOutput = "zoo"), 
    prototype=prototype(
    tsOutput=some_zoo_object 
) 
) 

:あなたは、「プロトタイプ」を指定することで、この問題を解決することができます。 numericスロットのデフォルトプロトタイプはnumeric()ですが、(S4)クラスzooを自分で定義したため、デフォルトはnew("zoo")で、これは定義されていません。

+0

ありがとうございました。それは確かに意味があります。 'some_zoo_object = zoo()'を使うことをお勧めします。これは、zooクラスを持つデフォルトオブジェクトのために最も近いところです。 –

関連する問題