首页 > 解决方案 > CRAN 要求将 \dontrun{} 替换为 \donttest{} 后 R 包中的问题

问题描述

我向 CRAN 提交了一个包,他们要求我在 Rd 文件中替换\dontrun{}为并重新提交。\donttest{}\dontrun{}用来包装一些应该抛出错误消息的示例。

替换\dontrun{}为之后,\donttest{}我进行了一些测试并且R CMD check仍然成功,但是由于包含以下示例,现在两者都devtools::check()失败R CMD check --as-cran\donttest{}

checking examples with --run-donttest ... ERROR

经过一番浏览,我了解到 R 4.0.0 已更改R CMD check --as-cran为运行\donttest示例。根据 R-devel 的新闻

“R CMD check --as-cran 现在运行 \donttest 示例(由 example() 运行),而不是指示测试人员这样做。这可以通过将环境变量R_CHECK_DONTTEST_EXAMPLES设置为 false 值在开发过程中暂时规避。”

由于我打算将包重新提交给 CRAN,因此设置_R_CHECK_DONTTEST_EXAMPLES_false本地对我没有帮助。

我还在Hadley Wickham 指出的问题中发现最近的讨论:devtools

“一般来说,现在如果你不想在 CRAN 上运行测试,\dontrun{} 更有可能工作,但使用 \dontrun{} 可能会导致初始提交失败。”

所以现在我不知道如何继续,因为如果我重新提交带有所需更改的包,我已经知道它会抛出一个错误R CMD check --as-cran,因此它可能会使 CRAN 的自动预测试失败。

编辑:

正如这里建议的那样,我尝试if(interactive()){}了而不是\dontrun{}. 这个解决方案成功了R CMD check --as-crandevtools::check()但我认为它不是解决这个问题的最合适的方法,因为它不能很好地工作example()(抛出错误并且不显示剩余的示例)。\dontrun{}效果更好,example()因为它会打印所有示例,但会注释掉用\dontrun{}.

标签: rdevtoolscran

解决方案


如果您知道某些内容会引发错误,则可以将其包装在try().

## example of failing code
try(stop("Here is an error"))

推荐阅读