【问题标题】:R CMD Check non-S3-methods with dots in the name where part of name before dot coincides with a generic in utilsR CMD 检查名称中带有点的非 S3 方法,其中点之前的部分名称与 utils 中的泛型重合
【发布时间】:2016-12-08 19:08:27
【问题描述】:

这个问题与Exporting non-S3-methods with dots in the name using roxygen2 v4 相关但不同。从那篇文章中,我了解到需要使用 @export function.name 才能让 roxygen 正确写入 NAMESPACE。我已经这样做了,并且正确写入了 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() 的注释?

【问题讨论】:

    标签: r-package cran roxygen2 r-s3


    【解决方案1】:

    这是一个肮脏的技巧,但它确实有效:只需将函数注册为方法,除了导出。

    所以你的NAMESPACE 可能有这样两行:

    export(tail.g)
    S3method(tail, g)
    

    这似乎足以消除警告并获得干净的 CRAN 提交。对于普通用户,我能想到的唯一负面影响是methods(class="g") 或methods("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"
    )
    

    【讨论】:

    • 不幸的是,如果签名不兼容,它仍然会抛出错误,例如如果你的函数是tail.g(foo, bar),而现有方法是tail(x, ...)。
    猜你喜欢
    • 2020-07-20
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2013-08-27
    • 1970-01-01
    相关资源
    最近更新 更多