CRAN 要求将 \dontrun{} 替换为 \donttest{} 后 R 包中的问题
Issues in R package after CRAN asked to replace \dontrun{} by \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 now runs \donttest examples (which are run by example()) instead of instructing the tester to do so. This can be temporarily circumvented during development by setting environment variable R_CHECK_DONTTEST_EXAMPLES to a false value."
因为我打算重新提交包到CRAN,所以在本地设置_R_CHECK_DONTTEST_EXAMPLES_
到false
对我没有帮助。
我还发现 this 最近在一个 devtools
问题中的讨论,其中 Hadley Wickham 指出:
"Generally, now if you don't want to run tests on CRAN \dontrun{} is more likely to work, but using \dontrun{} may cause initial submission to fail."
所以现在我不知道如何继续,因为如果我重新提交包含所需更改的包,我已经知道它会在 R CMD check --as-cran
中抛出错误,因此它可能无法通过 CRAN 的自动预测试。
编辑:
按照建议 here 我尝试 if(interactive()){}
而不是 \dontrun{}
。此解决方案在 R CMD check --as-cran
和 devtools::check()
中成功,但我认为这不是解决此问题的最合适方法,因为它不能很好地与 example()
一起使用(抛出错误并且不会显示其余示例)。 \dontrun{}
与 example()
一起使用时效果更好,因为它会打印所有示例,但会注释掉用 \dontrun{}
.
包裹的示例
我认为包示例不适合 “应该抛出错误消息的示例”。
当您将这些 'examples' 移动到 testthat 单元测试时,您的问题将很容易解决。
有
expect_error()
expect_warning()
查看您的包裹是否按预期抛出 warning/error。
如果你真的想告知用户他们应该避免输入什么,也许你可以将它作为注释添加到示例或其他文档中(详细信息,参数)
您在其他包示例中经常看到的是:
## 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
如果你知道某些东西会抛出错误,你可以将它包装在 try()
.
## example of failing code
try(stop("Here is an error"))
我向 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 now runs \donttest examples (which are run by example()) instead of instructing the tester to do so. This can be temporarily circumvented during development by setting environment variable R_CHECK_DONTTEST_EXAMPLES to a false value."
因为我打算重新提交包到CRAN,所以在本地设置_R_CHECK_DONTTEST_EXAMPLES_
到false
对我没有帮助。
我还发现 this 最近在一个 devtools
问题中的讨论,其中 Hadley Wickham 指出:
"Generally, now if you don't want to run tests on CRAN \dontrun{} is more likely to work, but using \dontrun{} may cause initial submission to fail."
所以现在我不知道如何继续,因为如果我重新提交包含所需更改的包,我已经知道它会在 R CMD check --as-cran
中抛出错误,因此它可能无法通过 CRAN 的自动预测试。
编辑:
按照建议 here 我尝试 if(interactive()){}
而不是 \dontrun{}
。此解决方案在 R CMD check --as-cran
和 devtools::check()
中成功,但我认为这不是解决此问题的最合适方法,因为它不能很好地与 example()
一起使用(抛出错误并且不会显示其余示例)。 \dontrun{}
与 example()
一起使用时效果更好,因为它会打印所有示例,但会注释掉用 \dontrun{}
.
我认为包示例不适合 “应该抛出错误消息的示例”。
当您将这些 'examples' 移动到 testthat 单元测试时,您的问题将很容易解决。
有
expect_error()
expect_warning()
查看您的包裹是否按预期抛出 warning/error。
如果你真的想告知用户他们应该避免输入什么,也许你可以将它作为注释添加到示例或其他文档中(详细信息,参数)
您在其他包示例中经常看到的是:
## 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
如果你知道某些东西会抛出错误,你可以将它包装在 try()
.
## example of failing code
try(stop("Here is an error"))