オブジェクトが存在しないスーパークラスを持つクラス階層がありfb
ます (仮想クラスを試しましたが、仮想クラスからオブジェクトを初期化できないという問題が発生しました)。さらに、同じスロットを持つ 2 つのサブクラス ( foo
、 ) があります。bar
ここで、値に基づいてサブクラスの 1 つのオブジェクトを返すスーパークラスの初期化メソッドを使用して、新しいオブジェクトを作成したいと考えています。
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 コンストラクトを使用せずに、メソッド内で目的を達成する方法はありますか?