スーパークラスfb
のオブジェクトが存在しないクラス階層があります(仮想クラスを試しましたが、仮想クラスからオブジェクトを初期化できないという問題がありました)。さらに、同じスロットを持つ2つのサブクラス(foo
、bar
)があります。今、私はいくつかの値に基づいてサブクラスの1のオブジェクトを返すスーパークラスにinitializeメソッドを使用して、新しいオブジェクトを作りたい:明らか他のオブジェクトが返されるように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構造を使用しない方法がありますか?