【问题标题】:Include R6 class object in R package在 R 包中包含 R6 类对象
【发布时间】:2017-06-27 08:53:30
【问题描述】:

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

我有一个R6ClassConstructorGridworld:

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

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

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

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

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

如何在包中包含这个R6 类对象?

【问题讨论】:

    标签: r package r6


    【解决方案1】:

    也许最好在加载包时调用new。这样您就不会在引用语义方面遇到任何麻烦。

    查看答案here

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

    # file R/zzz.R
    .onLoad <- function(libname, pkgname){
      gridworldInstance <- Gridworld$new() 
    }
    
    # documentation
    #' Instance of grid world
    #' 
    #' some description
    #'
    #' @name gridworldInstance
    NULL
    #' @export
    

    【讨论】:

    • 好主意!但是我在运行library("mypackage"); gridworldInstance 时收到错误消息:“错误:找不到对象'gridworldInstance'”。如果我使用 &lt;&lt;- 而不是 &lt;- gridworldInstance 将存在于全局工作区中,但我不喜欢在包加载时更改全局工作区。无论哪种方式,都无法通过 ?gridworldInstance 访问帮助页面。
    猜你喜欢
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多