从可选包

时间:2017-03-14 00:53:47

标签: r generics

我有package为其对象提供as.FlexTable方法,从ReporteRs包扩展S3泛型。因此,由roxygen生成的我的NAMESPACE文件包含以下行:

importFrom(ReporteRs,as.FlexTable)
...
S3method(as.FlexTable,huxtable)
...
export(as.FlexTable)

我不太想将ReporteRs放在Imports中:在DESCRIPTION文件中,因为它涉及对Java的一个很大的外部依赖。但是,当我把它放入Suggests:时,R CMD check给了我“不需要命名空间依赖”这样的错误。

无论如何,我可以扩展通用而不会产生硬依赖吗?

1 个答案:

答案 0 :(得分:4)

导入是一种硬依赖。 有些人不正式导入,但使用<pkgNamespace>::<obj> 相反,将其代码条件化为可用性 那个命名空间 我根本不建议这样做,尤其不是 扩展通用。

我建议你与ReporteRs的维护者讨论:

  1. 您可以使用一个常见的(尚未创建的)非常小的包裹flexS3generics 它提供了你想要使用的S3泛型(和S4 if ..) 两者,然后你和她/他都从那个迷你包装进口。 你们都是那个包的作者。

  2. 如果你的包装要小得多(占地面积小,包括 依赖)比'ReporteRs'她/他可能同意导入 来自您的包的S3通用而不是相反。

  3. 两者都是干净的解决方案,在发布到CRAN时都需要一些时间协调, '1)'更容易:flexS3generics被释放后 CRAN,将你的包裹改为(两个) importFrom(flexS3generics, as.FlexTable)但这些变化和CRAN 然后提交的内容彼此独立。

    ((味道:我非常喜欢as.flexTable(小写“f”)))