R参考类问题

She*_*ock 6 oop r 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()
Run Code Online (Sandbox Code Playgroud)

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

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

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

有人能指出我的问题在哪里吗?提前谢谢了.

flo*_*del 9

methods对参数setRefClass需要被命名列表.问题是您使用的是assign运算符,<-而不是=在定义列表时.看看之间的区别

list(a = 1, b = 2)
# $a
# [1] 1
# 
# $b
# [1] 2
Run Code Online (Sandbox Code Playgroud)

它返回一个命名列表和

list(a <- 1, b <- 2)
# [[1]]
# [1] 1
# 
# [[2]]
# [1] 2
Run Code Online (Sandbox Code Playgroud)

它会在您的环境中创建ab返回一个未命名的列表.

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

methods = list(initialize = function [...],
               printValues = function [...]
Run Code Online (Sandbox Code Playgroud)