【问题标题】:Why does roxygen interpret a documentation field as code?为什么 roxygen 将文档字段解释为代码?
【发布时间】:2021-07-24 22:16:05
【问题描述】:

我正在构建一个在文件中包含一个简单 R6 类的包。类定义开始如下:

#' @import R6 RBGL bnlearn

#' An R6 for a generated scale-free network
SFNetwork <- R6Class("SFNetwork", list(

然后我收到以下警告和错误:

Warning messages:
1: In loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :
  there is no package called ‘for’
2: In loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :
  there is no package called ‘scale-free’
3: In loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :
  there is no package called ‘An’
4: In loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :
  there is no package called ‘a’
5: In loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :
  there is no package called ‘generated’
6: In loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :
  there is no package called ‘network’
7: SFNetwork.Rd is missing name/title. Skipping 
Documentation completed

==> R CMD INSTALL --no-multiarch --with-keep.source NetRes

* installing to library ‘/home/boris/R/x86_64-pc-linux-gnu-library/4.1’
* installing *source* package ‘NetRes’ ...
** using staged installation
** R
** byte-compile and prepare package for lazy loading
Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) : 
  there is no package called ‘for’
Calls: <Anonymous> ... loadNamespace -> withRestarts -> withOneRestart -> doWithOneRestart
Execution halted

我无法开始想象发生了什么,除了可能是一些神秘的 roxygen 格式问题?

【问题讨论】:

  • 你可以试试importing 三行而不是一行吗?
  • 这行得通,虽然我现在得到一个不同的错误: Rd_info(db[[i]]) 中的错误:'/home/boris/Projects/NetRes/man/ 中的缺失/空 \title 字段NetGen.Rd' 几乎可以肯定不相关 但是为什么要多行?我确定我以前使用过单行导入!
  • 我不能给你一个令人满意的答案来解释为什么会这样,但我知道如果我在记录我自己的包裹时不这样做会引发错误。您还需要为您的函数添加一个标题,否则它将无法按预期工作。标题和描述是必需的。请参考r-pkgs.org/man.html
  • 我添加了一行,然后删除了一行,它不再起作用,仍然因同样的错误而中断
  • 添加完整的roxygen2 注释,否则我们只是在黑暗中拍摄。但我们正在超越最初的问题。我相信我们现在正在将“如何使用 roxygen2”作为一个一般性问题。

标签: r roxygen2 r6


【解决方案1】:

您需要单独导入packages

#' @import R6
#' @import RBGL
#' @import bnlearn

当从packages导入functions时,你可以这样做,

#' @importFrom methods setClass setGeneric setMethod setRefClass

多个包imports inline,正如您所做的那样,被解释为#' @importFrom,因此您的语法是错误的。因此出现错误。

【讨论】:

  • 1.经过一些编辑后,此修复不再有效。此外,我在以前的包中使用了多个包导入。
  • 查看我上面的评论 :-)
【解决方案2】:

这令人难以置信,但我找到了原因:我错过了文档第一行中的@title 标记。由于 man/ 文件夹中的文件过时,这些消息被错误进一步模糊。删除这些并添加标题字段解决了问题。附言单行导入工作正常。

【讨论】:

  • 是的 - 正如 cmets 中提到的,标题是必须的! :-) 所以#' @import R6 RBGL bnlearn 开箱即用?
  • 是的;我已经有一个使用这种类型的生产包一年了。虽然在大多数情况下导入整个环境可能是个坏主意:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
相关资源
最近更新 更多