如何将存储在独立文件中的新R6Class函数集成到现有的R包中?

时间:2016-05-31 15:57:38

标签: r class

我正在使用R6Class模块系统的现有程序中工作。示例函数存储在文件son.R中,如下所示:

#' @importFrom R6 R6Class
son_class <- R6Class("son", inherit = mother_class,
  private = list( ... Some private elements ... ),
  public = list(
     initialize = function(x, y, z) {
       ...Some code...
       super$initialize(x, y)
     },
     calculate = function(x,y,z) {
     ... More Code ...
     calc_son(x,y,z)
     }
  )
)

#' @inheritParams ...
#' @return ...
#' @template ...
#' @examples ...
#' @export
son  <- function(x = "son", y, z) {
        son_class$new(x, y, z)
}

该软件包的作者说,创建新模块的方法是创建从mother_class继承的新R6Classes。因此,我创建一个看起来几乎相同的daughter.R文件,只是将子更改为女儿,但是当我尝试编译时,我收到以下错误:

==> R CMD INSTALL --no-multiarch --with-keep.source mypackage

Error in .install_package_code_files ( , instdir " . " ) :
missing files in 'path / to / mypackage / R' in the' Collate ' : daughter.R
ERROR: unable to collate and parse R files for package ‘mypackage’

这可能是此错误的来源。我按照作者的说法逐字记录。

1 个答案:

答案 0 :(得分:0)

我有办法做到这一点(有点)。我在NAMESPACE中加入一句话

export(daughter)

并在描述文件中,

之后
Collate: 
   'daughter.R'

编译包之后,一切似乎都没问题,而且功能完全集成,除了缺少文档。我100%确定手动改变DESCRIPTION和NAMESPACE不是标准做法,并会产生一个跟进问题:

Roxygen2: "Error in loadNamespace(name) : there is no package called ‘testthat’"?