我正在尝试在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”
另外,初始化方法没有被调用?
有人能指出我的问题所在吗?非常感谢提前。
答案 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
:
=