具有 S3 属性的 S4 对象的 R 实例

R Instance of S4 object with S3 attribute

我目前正在创建一个使用 S3 动物园对象的新 S4 class。我可以创建一个 class

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"

我不清楚为什么动物园 class 的默认对象没有启动。我也不知道怎么解决。

这个问题是因为R的class机制不知道如何创建一个新的zoo对象。您可以通过指定 "prototype":

来解决此问题
setClass(
  "rollingSD",
  slot = c(rollPeriod = "numeric", tsOutput = "zoo"),
  prototype=prototype(
    tsOutput=some_zoo_object
  )
)

其中 some_zoo_object 属于 class zoonumeric 插槽的默认原型是 numeric(),但是因为您自己定义了 (S4) class zoo,所以默认原型是 new("zoo") 而这不是未定义。