我遇到了R6继承的问题。我正在写2个包(工作相关,所以我必须使用假代码,但我会尽量保持准确)。
在ParentPackage中,我定义了一个R6类ParentClass。
#' @name ParentClass
#' @title ParentClass
#' @description blah blah
#' @importFrom R6 R6Class
#' @exportClass ParentClass
#' @export
ParentClass <-
R6Class('ParentClass',
initialize() = function(){print('initialize')},
list(method1 = function(){
print('test')
}
# create helper function to create R6 class
#' @name create_ParentClass_object
#' @title Create a ParentClass object
#' @description
#' Helper function to create ParentClass object
#' @export create_ParentClass_object
create_ParentClass_object = function(){
return(ParentClass$new())
}
运行以下命令安装
devtools::check()
roxygenize()
document()
install()
NAMESPACE文件看起来是正确的。
export(ParentClass)
export(create_ParentClass_object)
exportClasses(ParentClass)
importFrom(R6,R6Class)
转到文件2,保存在单独的目录中。它叫做ChildPackage。
#' @name ChildClass
#' @title Create ChildClass Object
#' @description blah blah 2
#' @importFrom R6 R6Class
#' @importClassesFrom ParentPackage ParentClass
#' @importFrom ParentPackage ParentClass
#' @export
ChildClass<-
R6Class('ChildClass',
inherit = ParentClass,
initialize = function(){},
method2 = function(){}
)
但是当我试图编译东西时,我得到一个错误。
roxygenise()
Warning message:
class "ParentClass" is not exported by 'namespace:ParentPackage'
install()
Error: class "ParentClass" is not exported by 'namespace:ParentPackage'
注意,加载父库会显示类。例如,ParentPackage::ParentClass显示了类。
R version 4.0.3 (2020-10-10)
roxygen2_7.1.1 devtools_2.3.2 usethis_2.0.0
当我忘记在一些通用指令(如@import
或@importClassesFrom
)后添加NULL
时,我遇到了类似的错误。如果你不这样做,它会将下一个注释行添加到你的指令中。例如:
#' @importClassesFrom mydependency niceclass
#' Some other docs
将在构建时返回以下错误:
Error: class ‘Some’ is not exported by 'namespace:mydependency'
<<p> 解决方案/strong>在指定通用指令时添加NULL
。
#' @importClassesFrom mydependency niceclass
NULL
#' Some other docs