R6Class 内の関数のformals() を取得しようとしています。しかし、これはうまくいかないようです。環境に問題があるのではないかと思います。
Test <- R6Class(
"Test",
public = list(
foo = function(x){
x
},
printFormals1 = function(){
formals("foo")
},
printFormals2 = function(){
formals("self$foo")
}
)
)
test <- Test$new()
test$printFormals1()
test$printFormals2()
エラーは言う:
Error in get(fun, mode = "function", envir = parent.frame()) :
object 'foo' of mode 'function' was not found
Error in get(fun, mode = "function", envir = parent.frame()) :
object 'self$foo' of mode 'function' was not found
R6Classes がなければ、これは簡単です。
foo <- function(x){
x
}
formals("foo")
結果:
$x
誰かが説明して助けてくれたらうれしい
ありがとうマイケル
編集:
解決策を見つけました。R6class とは関係ありません: eval(parse(text = "self$foo")) が仕事をします。他の誰かが同様の問題に直面した場合に備えて、質問を残しています。
Test <- R6Class(
"Test",
public = list(
foo = function(x){
x
},
printFormals2 = function(){
print(formals(eval(parse(text = "self$foo"))))
}
)
)
test <- Test$new()
test$printFormals2()