自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
作为弃用的兼容性函数。)
答案 0 :(得分:15)
正如Flick先生评论的那样,将完整的函数名称附加到roxygen线上可以正常工作。如果我将行更改为:
#' @export check.arg
然后NAMESPACE
文件包含:
export(check.arg)
答案 1 :(得分:-1)
使用@method generic class
和@export
代替@S3method
。看一下这个帖子:
S3 method help (roxygen2)