在 R 包中包含 R6 class 对象

Include R6 class object in R package

我目前正在开发一个 R 包,我想包含一个 class R6 的对象,它基本上是一个环境,以便用户可以轻松地使用它(与它的工作方式相同包中的数据集)。

我有一个 R6ClassConstructor 网格世界:

Gridworld <- R6::R6Class( ... )

然后我可以使用 grid = Gridworld$new() 创建一个新实例,它会生成一个 R6 class。然后我想将这个对象 grid 保存在包中,这样用户只需输入 grid.

就可以使用它

我尝试将 grid 保存为 /data 文件夹中的 .RData 对象,并在 /R 文件夹中记录 R6 class:

#' Gridworld
#' @format R6 class
"grid"

但这会导致 devtools::document 中出现错误:文件 'grid.RData' 具有幻数 'X'

如何在包中包含此 R6 class 对象?

也许最好在加载包时调用 new。这样你就不会遇到任何关于引用语义的问题。

查看答案here

在你的情况下,这看起来像

# file R/zzz.R
.onLoad <- function(libname, pkgname){
  gridworldInstance <- Gridworld$new() 
}

# documentation
#' Instance of grid world
#' 
#' some description
#'
#' @name gridworldInstance
NULL
#' @export