2
我有一个超类fb
的类层次结构,其中没有对象应该存在(我试过虚拟类,但遇到了无法从虚拟类初始化对象的问题)。此外,我有两个子类(foo
,bar
)具有相同的插槽。现在我想建立一个新的对象,使用初始化方法返回基于某个值的一个子类的对象超:有没有办法初始化S4对象,以便返回另一个对象?
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"
[email protected] <- 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构造?