-2

do.call("...",...)有没有一种简单的方法可以像R 中的标准函数一样通过字符串调用引用类对象的函数?

4

1 回答 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 回答