r-package - R CMD 检查名称中带有点的非 S3 方法,其中点之前的部分名称与 utils 中的泛型一致

标签 r-package cran roxygen2 r-s3

这个问题与 Exporting non-S3-methods with dots in the name using roxygen2 v4 相关但又不同.从那篇文章中我了解到需要使用 @export function.name为了让 NAMESPACE 被 roxygen 正确写入。我已经这样做了,并且 NAMESPACE 写得正确。

当我做 R CMD Check 时,我的问题就出现了。我有一个具有函数 tail.g() 的遗留代码. R CMD Check 抛出一个注意,指出一个明显的 S3 方法已被导出但未注册。

下面是一个可重现的示例。请注意 xxxx.g没有注释,这让我相信,因为 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 提交。对于普通用户,我能想到的唯一负面影响是在 methods(class="g") 之类的输出中出现了一些虚假条目。或 methods("tail") .大多数普通用户甚至不应该注意到。

使用 roxygen2,您可以使用 @rawNamespace标签以包含所需的 S3method您的 NAMESPACE 中的指令文件:
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"
)

关于r-package - R CMD 检查名称中带有点的非 S3 方法,其中点之前的部分名称与 utils 中的泛型一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41047027/

相关文章:

r - 在我的包中使用例如 ddply 时,如何摆脱 R CMD 检查生成的注释?

r - 使用 Packrat 和 AppVeyor 构建 R 包

R包依赖

在服务器上运行 R 脚本?

r - Ctrl + Shift + D 不运行文档例程

r - 用roxygen2记录数据集

r - 从包内部 packrat 库加载依赖项

r - n行后停止打印

r - 可以分别提取从 CRAN 和 Github 安装的 R 软件包吗?

r - 如何将原始数据包含在 R 包中