由于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)
.check
是 R.oo
中的 S3 泛型,所以 roxygen 试图变得聪明并猜测我想要 check.arg
成为 S3 方法。不幸的是,这些功能是不相关的,所以我不知道。(为了抢占我只是重命名
check.arg
的建议:这是其他人编写的遗留代码,我创建了一个 checkArg
替换,但我需要将 check.arg
作为不推荐使用的函数保留为兼容性。)
最佳答案
正如弗里克先生所评论的那样,将完整的函数名称附加到 roxygen 行可以正常工作。如果我将行更改为:
#' @export check.arg
然后
NAMESPACE
文件包含:export(check.arg)
关于r - 使用 roxygen2 v4 导出名称中带有点的非 S3 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24594507/