 <p>you can add a helper method <code>get</code> to your class:</p> <pre><code>... A &lt;- R6::R6Class( "A", private = list( private_print = function(){print("Ola")} ), public = list( get = function(name=NULL){ # recursion if( length(name)&gt;1 ){ tmp &lt;- lapply(name, self$get) names(tmp) &lt;- name return(tmp) } if(is.null(name)){ self$message("no input, returning NULL") return(NULL) } # self if(name=="self"){ return(self) } # in self if( name %in% names(self) ){ return(base::get(name, envir=self)) } # private or in private if( exists("private") ){ if(name=="private"){ return(private) }else if(name %in% names(private) ){ return(base::get(name, envir=private)) } } # else self$message("name not found") return(NULL) } ) ) ... </code></pre> <p>Than use it like this:</p> <pre><code>a &lt;- A$new() a$get("private_print")() ## [1] "Ola" </code></pre>