R Reference Class issue

ⅰ亾dé卋堺 提交于 2019-12-22 05:24:11

问题


I am trying to create a simple reference class in R. Here is my code (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()

This produces the following error for the last line, a$printValues:

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

Also, the initializer method is not being called ?

Can someone point me to where the issue lies here ? Many thanks in advance.


回答1:


The methods argument to setRefClass needs to be a named list. The problem is you are using the assign operator <- instead of = when defining your list. See the difference between

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

which returns a named list and

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

which creates a and b in your environment and returns an unnamed list.

So when passing your methods, you need to use =:

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


来源:https://stackoverflow.com/questions/11596213/r-reference-class-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!