RIで新しい参照クラスを実験しているときに、メソッドに「[[]]」表記を使用すると(X $doSomethingの代わりにX[["doSomething"]])、奇妙な動作に気づきました。この表記はフィールドでは機能しますが、「class(X $ doSomething)」を実行すると、後で「[[]]」を使用できることがわかるまで、メソッドでは機能しないと最初は思っていました。以下の簡単な例は、ポイントを示しています。
setRefClass("Number",
fields = list(
value = "numeric"
),
methods = list(
addOne = function() {
value <<- value + 1
}
)
)
X <- new("Number", value = 1)
X[['value']] # 1
X[["addOne"]]() # Error: attempt to apply non-function
class(X[["addOne"]]) # NULL
class(X$addOne) # "refMethodDef"
# Now the following works!
X[["addOne"]]() # sets X$value = 2
class(X[["addOne"]]) # "refMethodDef"
これに遭遇した理由は、オブジェクトをリストにグループ化し、その中の各オブジェクトに指定されたメソッドを適用する「applyMethod」関数を作成したいためです。したがって、メソッドを文字列として指定する必要があります。誰かが私がこれを達成する方法について何かアイデアがありますか?