如何使用 roxygen2 将 S3method 导出为方法和正常函数

How to export S3method both as method and normal function using roxygen2

那里有类似的、较旧的问题,但自从 roxygen2 版本 3.0.0 以来,情况发生了一些变化(正如我从其他问答中了解到的那样)。

我写了一个替代函数 format.Date,我想将其作为方法和函数导出。
使用 @export 标签意味着 roxygen2 将其识别为打印的 S3 方法,并相应地注册它。当我加载我的包并打印一个日期对象时,我的方法被调用。到目前为止,还不错。

但是,当我调用 format.Date 时,我仍然得到正常的基本方法。当我使用 debugonce(format.Date) 时也会发生这种情况,'debug-mark' 在 base::format.Date 上设置,因此如果调用我的方法,则不会发生任何事情。或者,如果我想检查源代码:用户很难理解他使用 View(format.Date) 看到的不是执行的内容。
如果用户查看我的包我提供了哪些功能,format.Date 不存在。

所以我希望 format.Date 导出为 一个 S3 方法,以及一个名为 format.Date[ 的普通函数=30=]。为此,我希望我的 NAMESPACE 文件包含以下两行:

S3method(format,Date)
export(format.Date)

这在 roxygen2 中可行吗?我的印象是您可以在早期版本中执行此操作(因为您可以同时提供 @S3method/@method 和 @export),但我现在无法让它工作。

背景信息:roxygen2 版本 6.1.1 和 R 3.5.1,运行 在 Rstudio 1.1.453/MacOS 10.13.6 下

我找到的方法是

  1. @exportS3Method 和明确的 @export 行。由于 roxygen2 经常变化,这可能会在未来发生变化:

    #' @exportS3Method fortify
    #' @export fortify.Date
    
  2. 手动拼写 NAMESPACE 内容(不添加其他 @export@method 指令)

    #' @rawNamespace S3method(fortify,Date)
    #' export(fortify.Date)
    

两者都会生成包含以下行的 NAMESPACE 文件,第一行会生成 roxygen2 为您订购的东西。

S3method(fortify,Date)
export(fortify.Date)