从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)