r - 在 R 包开发中何时以及何时不使用 \donttest 和 \dontrun?
问题描述
所以我将我的包提交给 CRAN,我对何时将示例包装在\donttest
or中感到困惑\dontrun
。我有几个不同的案例:
- 返回数据帧等的示例
- 返回通过 ggplot2 生成的静态图形的示例
- 返回通过 plotly 生成的 JavaScript 图形的示例
- 读取或写入文件系统的示例(例如导入数据和编写电子表格)
- 运行闪亮应用程序的示例
我已经解决了(1)我永远不应该换成\donttest
or \dontrun
。对于 (5) 我应该将整个函数包装在if(interactive()){}
.
这仍然留下案例 2-5,我不确定是否应该将示例包装或不包装。我猜情节还可以,但不确定读/写文件。非常感谢任何提示或将我引导到明确解释的地方。谢谢。
解决方案
一般来说,除非您需要它们,否则您应该避免使用这些标记。如果示例执行可能失败的操作,您将需要其中之一,因为 CRAN 会将失败视为您的包中的错误。如果他们做一些危险的事情(例如在用户的主目录中创建文件、删除您创建的临时文件以外的文件、发送电子邮件等),您也会使用它们。
\dontrun
标记更强。在过去的例子中,甚至不需要在语法上是正确的,尽管我认为这可能已经改变了。如果用户运行该example()
函数,他们将不会运行该代码。
用于\donttest
运行时间过长且违反 CRAN 5 秒限制的示例。运行的用户example()
将运行这些,但您的包的基本测试不会。有时 CRAN 会测试\donttest
代码,所以它必须工作。(一般来说,如果可以的话,最好给出运行速度很快且不要达到 5 秒限制的示例。)
对于您的特定示例,只要它们足够快,就不需要任何包装,并且您可以安排所有文件系统更改发生在 R 会话临时目录中。
推荐阅读
- angular - 如何将数组修补到formarray
- php - 如何在 laravel 8 中使用预先存在的表进行自定义身份验证?
- mysql - MySql如何获取2个日期之间的数据,如果为空返回0
- c# - 继承到 c# 扩展方法的 Swift 扩展?
- ios - 如何嗅探以太网 iOS 流量
- docker - VueJS Nginx 和 docker 设置 - 本地 ERR_EMPTY_RESPONSE
- javascript - 将 Swiper npm 模块导入 Laravel
- sql - 查找给定列中差异最大的实体
- entity-framework - 队列
带有 Entity Framework Cast 错误的类型 - android - 无法解析 Android 应用程序模块的 Gradle 配置。解决 gradle 构建问题和/或重新同步