devtools::check_man() 给出错误,但 devtools::check() 没有

devtools::check_man() gives error but devtools::check() does not

我正在开发一个包 (https://github.com/dpmcsuss/iGraphMatch/)。

我刚开始使用 devtools::check() 等来检查问题。目前,我没有收到任何错误、警告或注释 (YAY)。

不幸的是,有时我想使用 devtools::check_man() 来检查文档是否存在问题,因为那样会更快。当我 运行 时,我得到以下输出。

> devtools::check_man()
Updating iGraphMatch documentation
Loading iGraphMatch
Writing NAMESPACE
Writing NAMESPACE
Checking documentation...
Error: cannot source package code:
cannot add bindings to a locked environment

我试过分离包、卸载命名空间、确保文件未被锁定、卸载包、....似乎没有什么不同。

如果我制作一个新包一切正常。我意识到这远非最低限度的工作示例,但我不确定从哪里开始寻找。任何建议,将不胜感激。 (我还没有探索的一件事是记录的顺序是否很重要。)

这看起来像是 R 中的错​​误。如果您删除 matrix_list.R 中除 setClass 之外的所有代码,您仍然会遇到错误。如果您只删除 matrix_list.R 文件而不删除任何其他文件,则不会。

如果您使用 tools::checkDocStyle(dir = "iGraphMatch"),就会发生这种情况,您根本不需要 devtools

我得出的结论是 tools::checkDocStyle 函数与 S4 methods::setClass 之间存在一些不兼容性。我不知道是否有解决方法。

编辑添加:这个错误有一个相当简单的解决方法。反而 使用代码

matrix_list <- setClass("matrix_list", contains = "list")

matrix_list.R 文件中,使用这个几乎等效的代码:

setClass("matrix_list", contains = "list")

matrix_list <- function(...)
  new("matrix_list", ...)

这避免了触发 tools::checkDocStyle 中的错误。它并不完全相同,因为原始版本在生成器函数上添加了一些额外的属性,但它应该足够接近了。