使用roxygen2 v4导出名称中带点的非S3方法

时间:2014-07-06 09:36:04

标签: r roxygen2

roxygen2版本4.0.0起,我们已弃用@S3method代码,转而使用@export

程序包现在尝试检测某个函数是否为S3方法,并自动将行S3method(function,class)添加到NAMESPACE文件中,如果它认为是一个。

问题在于,如果函数不是S3方法但其名称包含.,则roxygen有时会出错,并在不应该添加时添加该行。

有没有办法告诉roxygen函数不是S3方法?


根据要求,这是一个可重复的例子。

我有一个导入R.oo的软件包,其函数名为check.arg

library(roxygen2)
package.skeleton("test")
cat("Imports: R.oo\n", file = "test/DESCRIPTION", append = TRUE)
writeLines(
  "#' Check an argument 
#' 
#' Checks an argument.
#' @param ... Some arguments.
#' @return A value.
#' @export
check.arg <- function(...) 0",
  "test/R/check.arg.R"
)
roxygenise("test")

现在命名空间包含行S3method(check,arg)

checkR.oo中的S3泛型,因此roxygen正在尝试变聪明并猜测我希望check.arg成为S3方法。不幸的是,这些功能是无关的,所以我没有。

(要抢占我只是重命名check.arg的建议:这是其他人编写的遗留代码,我创建了checkArg替换,但我需要将check.arg作为弃用的兼容性函数。)

2 个答案:

答案 0 :(得分:15)

正如Flick先生评论的那样,将完整的函数名称附加到roxygen线上可以正常工作。如果我将行更改为:

#' @export check.arg

然后NAMESPACE文件包含:

export(check.arg)

答案 1 :(得分:-1)

使用@method generic class@export代替@S3method。看一下这个帖子: S3 method help (roxygen2)