我有一个类层次结构,其中超类fb
不应存在对象(我尝试过虚拟类,但遇到了无法从虚拟类初始化对象的问题)。此外,我有两个子类(foo
,bar
)具有相同的插槽。现在,我想使用一个初始化方法将基于某些值返回一个子类对象的超类来创建一个新对象:
setClass("fb", representation( x = "numeric"))
setClass("foo", contains = "fb")
setClass("bar", contains = "fb")
setMethod("initialize", "fb", function(.Object, x) {
if (x < 5) class(.Object) <- "foo"
else class(.Object) <- "bar"
.Object@x <- x
.Object
})
> new("fb", x = 3)
Error in initialize(value, ...) :
initialize method returned an object of class "foo" instead of the required class "fb"
显然(并且可能有很好的理由)R 不允许这样做。在方法内部实现我所需求的功能而不使用 if-else 结构来创建新对象,是否有办法实现?