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構造?