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