从a similar question开始,我希望能够允许用户在我的包中扩展一个类,该类使用私有(不是export
- ed)函数。
最小的工作示例:
# my_package/R/Main.R
# My package:
#' @import methods MASS
PrivateFunc <- function(...) fractions(0.5) # a private function
#' @export Main
#' @exportClass Main
Main <- setRefClass("Main",
methods = list(
initialize = function(...) PrivateFunc()
)
)
问题是,Main
类使用从my_package
导出的非的函数,例如PrivateFunc
,以及fractions
中的函数MASS
Import
而不是Depends
。
因此,只要我实例化一个扩展Main
的类,R就会抱怨无法看到PrivateFunc
:
library(my_package)
Child <- setRefClass("Child", contains = "Main")
Child()
# Error in .Object$initialize(...) : could not find function "PrivateFunc"
这是否意味着我被迫export
Main
使用的每个私有函数?这会不会严重污染全局命名空间(正是我使用Imports
而不是“取决于”的原因)?
那么如何最好地解决这个问题呢?
修改:此外,用户可能会选择从他们正在撰写的自己的包中扩展Main
答案 0 :(得分:3)
这是参考类的限制。我建议查看R6(注意我是作者)。请参阅project page底部的文档链接。即将推出的版本有一个名为portable
的选项,可以毫无困难地进行跨包继承。