R参考类问题

时间:2012-07-21 22:09:58

标签: r oop reference-class

我正在尝试在R中创建一个简单的引用类。这是我的代码(R beginner):

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”

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

有人能指出我的问题所在吗?非常感谢提前。

1 个答案:

答案 0 :(得分:9)

methods的{​​{1}}参数需要是一个命名列表。问题是您在定义列表时使用的是赋值运算符setRefClass而不是<-。看到

之间的区别
=

返回一个命名列表和

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

在您的环境中创建list(a <- 1, b <- 2) # [[1]] # [1] 1 # # [[2]] # [1] 2 a并返回一个未命名的列表。

因此,在传递方法时,您需要使用b

=