【问题标题】:Extending an S3 generic from an optional package从可选包扩展 S3 泛型
【发布时间】:2017-03-14 17:05:41
【问题描述】:

我有一个package,它为其对象提供了一个as.FlexTable 方法,从ReporteRs 包中扩展了S3 泛型。所以,我的 NAMESPACE 文件,由 roxygen 生成,有几行:

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

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

我是否可以在不产生硬依赖的情况下扩展泛型?

【问题讨论】:

标签: r generics


【解决方案1】:

导入是一种硬依赖。 有些人不正式导入而是使用<pkgNamespace>::<obj> 取而代之的是,将他们的代码以 那个命名空间。 我完全不推荐,尤其是不推荐 扩展泛型。

我建议你和ReporteRs的维护者谈谈:

  1. 你可以使用一个普通的(尚未创建的)非常小的包,比如flexS3generics 它提供了您想要使用的 S3 泛型(如果 .. 则提供 S4) 两者,然后你和她/他都从那个迷你包中导入。 你们都是该软件包的作者。

  2. 如果您的封装更小(在其占用空间中,包括 依赖项)而不是“ReporteRs”,她/他可能同意导入 您的包中的 S3 泛型,而不是相反。

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

((口味:我更喜欢as.flexTable(小写“f”)))

【讨论】:

  • 我可能应该知道,但 Martin Maechler 是谁? (NB Martin:我更喜欢as_flextable,但这不是我的决定,而且这个包已经存在了 5 年多......)
猜你喜欢
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 2021-02-11
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多