CRAN要求将\ dontrun {}替换为\ donttest {}

问题描述

我向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的NEWS

“ R CMD check --as-cran现在运行\ donttest示例(由example()运行),而不指示测试仪执行此操作。可以在开发过程中通过设置环境变量 R_CHECK_DONTTEST_EXAMPLES暂时避开它为错误值。”

由于我打算将软件包重新提交给CRAN,因此在本地将_R_CHECK_DONTTEST_EXAMPLES_设置为false不会对我有帮助。

devtools问题中,我还发现this最近的讨论,其中哈德利·威克姆(Hadley Wickham)说:

“通常,现在,如果您不想在CRAN上运行测试,\ dontrun {}更可能起作用,但是使用\ dontrun {}可能会导致初始提交失败。”

所以现在我不知道如何进行,因为如果我重新提交了具有必要更改的软件包,我已经知道它将在R CMD check --as-cran中引发错误,因此可能会导致CRAN的自动预测试失败。

编辑:

根据建议here,我尝试使用if(interactive()){}而不是\dontrun{}。此解决方案在R CMD check --as-crandevtools::check()中成功,但是我认为这不是解决此问题的最合适方法,因为它不适用于example()(会引发错误并且不能显示其余示例)。 \dontrun{}example()搭配使用效果更好,因为它可以打印所有示例,但可以注释掉用\dontrun{}包装的示例。

解决方法

如果您知道某些东西会引发错误,则可以将其包装在try()中。

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

我不认为软件包示例适合“应该抛出错误消息的示例”

将这些“示例”移至testthat单元测试中,即可轻松解决您的问题。

expect_error()
expect_warning()

查看您的包裹是否按预期抛出警告/错误。

如果您真的想告知用户应该避免输入的内容,也许您可​​以将其作为示例或其他文档的注释添加(详细信息,参数)

您在其他包装示例中经常看到的内容如下:

## Example for working
function(x,abc = "5)

## This would give an error because
# function(x,abc = "falsch")

## Working example 2
function(x)
x <- x+y

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...