R class problem

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 results in the following error for the last line: $ 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 initialization method is not called?

Can someone point me where the problem is here? Thank you very much in advance.

+4
source share
1 answer

The methods argument to setRefClass must be a named list. The problem is that when you define a list, you use the assignment operator <- instead of = . 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 [...] 
+7
source

All Articles