我正在使用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’
这可能是此错误的来源。我按照作者的说法逐字记录。
答案 0 :(得分:0)
我有办法做到这一点(有点)。我在NAMESPACE中加入一句话
export(daughter)
并在描述文件中,
之后Collate:
'daughter.R'
编译包之后,一切似乎都没问题,而且功能完全集成,除了缺少文档。我100%确定手动改变DESCRIPTION和NAMESPACE不是标准做法,并会产生一个跟进问题:
Roxygen2: "Error in loadNamespace(name) : there is no package called ‘testthat’"?