2016-09-28 57 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 =动物园()'。这是我们可以最接近的一个动物园类的默认对象。 –

相关问题