do.call("...",...)
有没有一种简单的方法可以像R 中的标准函数一样通过字符串调用引用类对象的函数?
问问题
244 次
1 回答
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
似乎独立于实例,但实际上是在实例的环境中定义的
> 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))
于 2013-09-12T16:38:32.953 回答