使用roxygen2 v4导出名称中带有点的非S3方法

使用roxygen2 v4导出名称中带有点的非S3方法,r,roxygen2,R,Roxygen2,自roxygen2版本4.0.0以来,@S3method标签已被弃用,转而使用@export 该包现在尝试检测一个函数是否是S3方法,并自动将行S3method(函数,类)添加到名称空间文件(如果它认为它是一个) 问题是,如果一个函数不是S3方法,但它的名称包含一个,那么roxygen有时会出错,并在不应该的时候添加该行 有没有办法告诉roxygen函数不是S3方法 根据要求,这里有一个可复制的示例 我有一个导入R.oo的包,其中有一个名为check.arg的函数 library(roxyge

roxygen2
版本
4.0.0
以来,
@S3method
标签已被弃用,转而使用
@export

该包现在尝试检测一个函数是否是S3方法,并自动将行
S3method(函数,类)
添加到
名称空间
文件(如果它认为它是一个)

问题是,如果一个函数不是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")
库(roxygen2)
包装。骨架(“测试”)
cat(“导入:R.oo\n”,file=“测试/描述”,append=TRUE)
书写线(
“#”检查参数
#' 
#“检查一个论点。
#“@param…一些参数。
#“@返回一个值。
#“@出口

check.arg正如Flick先生所评论的,将完整函数名附加到roxygen行是正确的。如果我将该行更改为:

#' @export check.arg
然后
名称空间
文件包含:

export(check.arg)

使用
@method generic class
@export
而不是
@S3method
。查看此线程:

我相信您只需使用带有函数全名的
@export
。包含一个to test会很有帮助。@MrFlick感谢您的解决方案,也感谢您提醒我不要偷懒。这个问题不是关于如何记录S3方法,而是关于记录非S3方法的内容的相反问题(但roxygen认为是的)。需要注意的另一个问题是用法语句,它会说类“check”\n check(…)
的S3方法,除非您解决了它。一种方法是只添加一个
##@usage check.arg(x)
指令,不确定是否有更好的方法。请注意,上述解决方案将为您的
命名空间
文件提供正确的条目。但是,为了正确记录函数,您还需要添加
@usage
标记,否则类“arg”的消息
#S3方法将显示在签名上方如果你的函数在它的
.Rd
文件中,那么帮助文件中的签名将是
check(…)
而不是
check.arg(…)
@Jthorpe非常值得一提(值得回答!).
R CMD check
可能仍会发出警告,如发现以下明显的S3方法已导出但未注册:并且您必须将函数重命名为才能在CRAN成功提交(它们不允许警告)。