从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")
Run Code Online (Sandbox Code Playgroud)
现在命名空间包含该行S3method(check,arg).
check是一个S3泛型R.oo,所以roxygen试图聪明,并猜测我想check.arg成为一个S3方法.不幸的是,这些功能是无关的,所以我没有.
(为了抢占我刚刚重命名的建议check.arg:这是其他人编写的遗留代码,我已经创建了一个checkArg替代品,但我需要将其check.arg作为兼容性的弃用函数保留.)
Ric*_*ton 17
正如Flick先生评论的那样,将完整的函数名称附加到roxygen线上可以正常工作.如果我将行更改为:
#' @export check.arg
Run Code Online (Sandbox Code Playgroud)
然后该NAMESPACE文件包含:
export(check.arg)
Run Code Online (Sandbox Code Playgroud)