具有 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 zoo
。 numeric
插槽的默认原型是 numeric()
,但是因为您自己定义了 (S4) class zoo
,所以默认原型是 new("zoo")
而这不是未定义。
我目前正在创建一个使用 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 zoo
。 numeric
插槽的默认原型是 numeric()
,但是因为您自己定义了 (S4) class zoo
,所以默认原型是 new("zoo")
而这不是未定义。