在R RefClass实例环境中评估表达式

时间:2019-05-10 15:20:39

标签: r class eval

我正在处理一个以前从未遇到过的新问题(以前运行良好)。 如果我以前没有从实例范围之外运行过类的方法,则R显示错误。 我不知道如何表达我的问题,请阅读示例:

> setRefClass(
+   Class = "testClass",
+   methods = list(
+     test = function(){
+       print("test")
+     }
+   )
+ )
> instance = new("testClass")
> eval(substitute(test()), instance) 
Error in test() : could not find function "test"
> # WHY DID I GET ERROR !!!!

> instance$test()
[1] "test"
> eval(substitute(test()), instance)
[1] "test"
> # IF I RUN THE METHODE ONCE FROM OUTSIDE, I DON'T GET ERROR!!!!

1 个答案:

答案 0 :(得分:0)

经过一些试验,看起来R应该在使用它之前将方法安装到Class上。

但是,我可以在类field中定义一个函数,并立即使用它。

这里是一个例子:

> setRefClass(
+   Class = "testClass",
+   fields = list (
+      test = "function"
+   ),
+   methods = list(
+     initialize = function(){
+       test <<- function(){
+           print("test")
+       }
+     }
+   )
+ )
> instance = new("testClass")
> eval(substitute(test()), instance)
[1] "test"

我不确定到底有什么区别,但是它能按我的预期工作。