自从 roxygen2
版本 4.0.0
开始,@S3method
标签已被弃用,建议使用 @export
代替。
现在该软件包会尝试检测函数是否为 S3 方法,并在认为是 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
作为过时的函数保留以保持兼容性。)
@export
和函数的完整名称即可。如果提供一个可复现的示例,将会有所帮助。 - MrFlick