Error populating class variable in R6 - cannot access class variable

48 Views Asked by At

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?

1

There are 1 best solutions below

0
On BEST ANSWER

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)