我有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
给了我“不需要命名空间依赖”这样的错误。
无论如何,我可以扩展通用而不会产生硬依赖吗?
答案 0 :(得分:4)
导入是一种硬依赖。
有些人不正式导入,但使用<pkgNamespace>::<obj>
相反,和将其代码条件化为可用性
那个命名空间
我根本不建议这样做,尤其不是
扩展通用。
我建议你与ReporteRs
的维护者讨论:
您可以使用一个常见的(尚未创建的)非常小的包裹flexS3generics
它提供了你想要使用的S3泛型(和S4 if ..)
两者,然后你和她/他都从那个迷你包装进口。
你们都是那个包的作者。
如果你的包装要小得多(占地面积小,包括 依赖)比'ReporteRs'她/他可能同意导入 来自您的包的S3通用而不是相反。
两者都是干净的解决方案,在发布到CRAN时都需要一些时间协调,
'1)'更容易:flexS3generics
被释放后
CRAN,将你的包裹改为(两个)
importFrom(flexS3generics, as.FlexTable)
但这些变化和CRAN
然后提交的内容彼此独立。
((味道:我非常喜欢as.flexTable
(小写“f”)))