如何使用roxygen2将S3方法同时导出为方法和普通函数

3

有类似的旧问题,但自从roxygen2版本3.0.0以来,一些事情已经改变了(根据我在SO上其他问答的理解)。

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

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

因此,我希望将format.Date导出为同时是S3方法和名为format.Date的普通函数。为此,我希望我的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下运行。

除了切换到手写的“NAMESPACE”,我不知道如何回答你的问题,但是可以通过使用“yourpackage :::format.Date”来解决您的名称冲突问题。这对您的用户没有太大帮助,但至少有助于调试。 - user2554330
1个回答

1
我找到的方法是:
  1. @exportS3Method and an explicit @export line. Since roxygen2 changes often, this might change in the future:

    #' @exportS3Method fortify
    #' @export fortify.Date
    
  2. Manually spelling out the NAMESPACE content (add no other @export or @method directives)

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

两者都会导致NAMESPACE文件包含以下行,第一行将使roxygen2为您排序。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接