1

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()
4

1 に答える 1