2016-09-28 55 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" 

這對我來說不清楚爲什麼動物園類的默認對象沒有啓動。我也不知道如何解決這個問題。

回答

1

該問題是由於R的類機制不知道如何製作新的zoo對象而引起的。您可以通過指定一個「原型」解決這個問題:

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

其中some_zoo_objectzoo類的。 numeric插槽的默認原型爲numeric(),但由於您自己定義了(S4)類zoo,因此缺省值爲new("zoo"),這未定義。

+0

謝謝你的回答。這確實很有意義。我會建議採取'some_zoo_object =動物園()'。這是我們可以最接近的一個動物園類的默認對象。 –

相關問題