R6的一个基本特征是方法属于对象。它们未绑定在包命名空间中,
本身
,因此,您无法使用访问它们也就不足为奇了
::
或
:::
. 下面是一个直接取自
?R6::R6Class
:
## An "R6ClassGenerator" object defining an R6 class
Queue <- R6::R6Class("Queue",
public = list(
initialize = function(...) {
for (item in list(...)) {
self$add(item)
}
},
add = function(x) {
private$queue <- c(private$queue, list(x))
invisible(self)
},
remove = function() {
if (private$length() == 0) return(NULL)
# Can use private$queue for explicit access
head <- private$queue[[1]]
private$queue <- private$queue[-1]
head
}
),
private = list(
queue = list(),
length = function() base::length(private$queue)
)
)
## A "Queue" object defining an R6 class instance
q <- Queue$new(5, 6, "foo")
您可以从访问公共方法
"R6ClassGenerator"
对象或
"Queue"
对象如下:
a1 <- Queue$public_methods$add
a2 <- q$add
identical(a1, a2, ignore.environment = TRUE) # TRUE
通过其中一个
a1
或
a2
到
formalArgs
获取形式参数的名称。
a1
# function(x) {
# private$queue <- c(private$queue, list(x))
# invisible(self)
# }
formalArgs(a1)
# [1] "x"
R6类内部到
cmdstanr
是
"CmdStanModel"
和
$sample()
是该类的公共方法,因此可以访问
$示例()
具有
formalArgs(cmdstanr:::CmdStanModel$public_methods$sample)
# [1] "data" "seed"
# [3] "refresh" "init"
# [5] "save_latent_dynamics" "output_dir"
# [7] "output_basename" "sig_figs"
# [9] "chains" "parallel_chains"
# [11] "chain_ids" "threads_per_chain"
# [13] "opencl_ids" "iter_warmup"
# [15] "iter_sampling" "save_warmup"
# [17] "thin" "max_treedepth"
# [19] "adapt_engaged" "adapt_delta"
# [21] "step_size" "metric"
# [23] "metric_file" "inv_metric"
# [25] "init_buffer" "term_buffer"
# [27] "window" "fixed_param"
# [29] "validate_csv" "show_messages"
# [31] "cores" "num_cores"
# [33] "num_chains" "num_warmup"
# [35] "num_samples" "save_extra_diagnostics"
# [37] "max_depth" "stepsize"