R6Class中的形式

时间:2015-07-30 15:47:27

标签: r r6

我正在尝试在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()

1 个答案:

答案 0 :(得分:2)

formals的引擎盖下,你会看到它有非常具体的搜索参数,当你传递一个不是函数的字符时。

你可以通过[避免eval(parse(text=...))丑陋]

这个功能
Test <- R6Class(
  "Test",

  public = list(
    foo = function(x){
      x
    }, 

    printFormals2 = function(){
     formals(self$foo)
    }
  )
)

test <- Test$new()

test$printFormals2()
# $x