首页 > 解决方案 > 在 R 包开发中何时以及何时不使用 \donttest 和 \dontrun?

问题描述

所以我将我的包提交给 CRAN,我对何时将示例包装在\donttestor中感到困惑\dontrun。我有几个不同的案例:

  1. 返回数据帧等的示例
  2. 返回通过 ggplot2 生成的静态图形的示例
  3. 返回通过 plotly 生成的 JavaScript 图形的示例
  4. 读取或写入文件系统的示例(例如导入数据和编写电子表格)
  5. 运行闪亮应用程序的示例

我已经解决了(1)我永远不应该换成\donttestor \dontrun。对于 (5) 我应该将整个函数包装在if(interactive()){}.

这仍然留下案例 2-5,我不确定是否应该将示例包装或不包装。我猜情节还可以,但不确定读/写文件。非常感谢任何提示或将我引导到明确解释的地方。谢谢。

标签: rcran

解决方案


一般来说,除非您需要它们,否则您应该避免使用这些标记。如果示例执行可能失败的操作,您将需要其中之一,因为 CRAN 会将失败视为您的包中的错误。如果他们做一些危险的事情(例如在用户的主目录中创建文件、删除您创建的临时文件以外的文件、发送电子邮件等),您也会使用它们。

\dontrun标记更强。在过去的例子中,甚至不需要在语法上是正确的,尽管我认为这可能已经改变了。如果用户运行该example()函数,他们将不会运行该代码。

用于\donttest运行时间过长且违反 CRAN 5 秒限制的示例。运行的用户example()将运行这些,但您的包的基本测试不会。有时 CRAN 会测试\donttest代码,所以它必须工作。(一般来说,如果可以的话,最好给出运行速度很快且不要达到 5 秒限制的示例。)

对于您的特定示例,只要它们足够快,就不需要任何包装,并且您可以安排所有文件系统更改发生在 R 会话临时目录中。


推荐阅读