Search code examples
rclass-variablesr6

Error populating class variable in R6 - cannot access class variable


Here is my example:

library(R6)

SharedVar <- R6Class("SharedVar",
                     public = list(x= NULL)
)

MainClass <- R6Class("MainClass",
                     public = list(
                       name = NULL,
                       shared_var = SharedVar$new(),
                       initialize = function(name = NA){
                         self$name = name
                       },
                       popuate_shared_var = function(foo = NA){
                         shared_var$x = foo
                       }
                       )
                     )

When I run:

test_obj <- MainClass$new(name = "test")
test_obj$popuate_shared_var(foo="some value")

I get back:

Error in shared_var$x = foo : object 'shared_var' not found

but the following works fine and returns NULL:

test_obj$shared_var$x

What am I missing?


Solution

  • You need a self so R knows where to find that shared_var.

    library(R6)
    
    SharedVar <- R6Class("SharedVar",
                         public = list(x= NULL)
    )
    
    MainClass <- R6Class("MainClass",
                         public = list(
                           name = NULL,
                           shared_var = SharedVar$new(),
                           initialize = function(name = NA){
                             self$name = name
                           },
                           popuate_shared_var = function(foo = NA){
                             self$shared_var$x = foo
                           }
                         )
    )
    
    test_obj <- MainClass$new(name = "test")
    test_obj$popuate_shared_var(foo="some value")
    
    test_obj$shared_var$x
    #> [1] "some value"
    

    Created on 2021-04-12 by the reprex package (v1.0.0)