对于R中的标准函数,是否有一种简单的方法可以通过字符串调用引用类的对象函数,如do.call("...",...)
?
答案 0 :(得分:2)
这是一个类和实例
A <- setRefClass("A",
fields=list(x="numeric"),
methods=list(value=function() x))
a <- A(x=10)
调用value方法的一种时髦方法是
> a[["value"]]
Class method definition for method value()
function ()
x
<environment: 0x123190d0>
建议我们可以做
> do.call("[[", list(a, "value"))()
[1] 10
这有一些非常奇怪的语义 - do.call
返回的函数似乎独立于实例,但实际上是在实例'environment
> fun = do.call("[[", list(a, "value"))
> fun
Class method definition for method value()
function ()
x
<environment: 0x1c7064c8>
> a$x=20
> fun()
[1] 20
此外,函数以“懒惰”方式实例化,因此a[["value"]]
仅在已通过a$value()
调用时才返回函数。正如?setRefClass
所讨论的那样,我认为可以在使用
A <- setRefClass("A",
fields=list(x="numeric"),
methods=list(
initialize=function(...) {
usingMethods("value")
callSuper(...)
},
value=function() x))