Object-Oriented Programming with S3 and R6 in R
Richie Cotton
Data Evangelist at DataCamp
thing_factory <- R6Class( "Thing",
private = list( ..a_field = 123 ),
active = list( a_field = function(value) { if(missing(value)) { private$..a_field } else { private$..a_field <- value } } )
)
a_thing <- thing_factory$new() a_copy <- a_thing
a_thing$a_field <- 456
a_copy$a_field
456
clone()
copies by value
a_clone <- a_thing$clone()
a_thing$a_field <- 789
a_clone$a_field
456
container_factory <- R6Class( "Container",
private = list( ..thing = thing_factory$new() ),
active = list( thing = function(value) { if(missing(value)) { private$..thing } else { private$..thing <- value } } )
)
a_container <- container_factory$new()
a_clone <- a_container$clone()
a_container$thing$a_field <- "a new value"
a_clone$thing$a_field
"a new value"
a_deep_clone <- a_container$clone(deep = TRUE)
a_container$thing$a_field <- "a different value"
a_deep_clone$thing$a_field
"a new value"
clone()
clone()
is autogeneratedclone(deep = TRUE)
is for R6 fieldsObject-Oriented Programming with S3 and R6 in R