如何扩展在使用私有函数的R包中定义的引用类?

时间:2014-08-14 14:21:48

标签: r class oop reference-class

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

1 个答案:

答案 0 :(得分:3)

这是参考类的限制。我建议查看R6(注意我是作者)。请参阅project page底部的文档链接。即将推出的版本有一个名为portable的选项,可以毫无困难地进行跨包继承。