7

我正在尝试在 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()

这会为最后一行 a$printValues 产生以下错误:

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

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

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

4

1 回答 1

10

to的methods参数setRefClass需要是一个命名列表。问题是您在定义列表时使用的是分配运算符<-而不是。=查看两者之间的区别

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

它返回一个命名列表和

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

它在您的环境中创建aandb并返回一个未命名的列表。

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

methods = list(initialize = function [...],
               printValues = function [...]
于 2012-07-21T22:33:46.860 回答