这个问题与
Exporting non-S3-methods with dots in the name using roxygen2 v4有关但不同.从那篇文章中我了解到需要使用@export function.name才能通过roxygen正确编写NAMESPACE.我已经做到了,并且正确编写了NAMESPACE.
当我做R CMD检查时出现问题.我有遗留代码,其函数为tail.g(). R CMD Check抛出一个注意,注意到已导出明显的S3方法但未注册.
可重复的例子如下.注意到xxxx.g没有NOTE,这让我相信因为tail在utils包中是通用的,我需要一些特殊的解决方法.我不想将tail.g重命名为tail_g,因为这是遗留代码.我希望消除成功提交CRAN的所有注释.
library(roxygen2)
package.skeleton("test")
writeLines(
"#' Check an argument
#'
#' Checks an argument.
#' @param ... Some arguments.
#' @return A value.
#' @export tail.g
tail.g <- function(...) 0",
"test/R/tail.g.R"
)
writeLines(
"#' Check an argument
#'
#' Checks an argument.
#' @param ... Some arguments.
#' @return A value.
#' @export xxxx.g
xxxx.g <- function(...) 0",
"test/R/xxxx.g.R"
)
roxygenise("test")
setwd("./test")
devtools::check(document=FALSE)
给出注意:
checking S3 generic/method consistency ... NOTE
Found the following apparent S3 methods exported but not registered:
tail.g
如何在不重命名的情况下消除tail.g()的注意事项?
最佳答案 这是一个肮脏的黑客,但它的工作原理:除了导出之外,只需将函数注册为方法.
所以你的NAMESPACE可以有这样的两行:
export(tail.g)
S3method(tail, g)
这似乎足以消除警告并获得干净的CRAN提交.我能想到的普通用户唯一的负面影响是方法(class =“g”)或方法(“tail”)等输出中的一些虚假条目.大多数普通用户甚至不应该注意到.
使用roxygen2,您可以使用@rawNamespace标记在NAMESPACE文件中包含所需的S3method指令:
writeLines(
"#' Check an argument
#'
#' Checks an argument.
#' @param ... Some arguments.
#' @return A value.
#' @export tail.g
#' @rawNamespace S3method(tail, g)
tail.g <- function(...) 0",
"test/R/tail.g.R"
)