2012-07-21 128 views
4

我试图创建R.一个简单的参考类下面是我的代码(R初学者):R参考类问题

MyClass <- setRefClass("MyClass", 
         fields = list(a = "numeric", 
            b = "numeric"), 

         methods = list(
         initialize <- function(){ 
          print("Initializing") 
          a <<- 1 
          b <<- 2 
         }, 

         printValues <- function(){ 
          print(a) 
          print(b) 
         } 
         ) 
         ) 

a <- MyClass$new() 
a$printValues() 

这将产生以下错误最后一行,一个$函数printValues:

Error in envRefInferField(x, what, getClass(class(x)), selfEnv) : 
    "printValues" is not a valid field or method name for reference class “MyClass” 

此外,初始化方法没有被调用?

有人可以指出问题出在哪里吗?提前谢谢了。

回答

7

setRefClassmethods参数需要是一个命名列表。问题在于,在定义列表时,您正在使用赋值运算符<-而不是=。见它返回一个名为列表和

list(a <- 1, b <- 2) 
# [[1]] 
# [1] 1 
# 
# [[2]] 
# [1] 2 

这会在您的环境ab,并返回一个不愿透露姓名的名单

list(a = 1, b = 2) 
# $a 
# [1] 1 
# 
# $b 
# [1] 2 

之间的差异。

所以通过你的方法时,你需要使用=

methods = list(initialize = function [...], 
       printValues = function [...] 
+0

卓越的捕获,非常感谢flodel – Sherlock 2012-07-26 16:49:55