![](/img/trans.png)
[英]When and when not to use \donttest and \dontrun in R package development?
[英]Issues in R package after CRAN asked to replace \dontrun{} by \donttest{}
我向 CRAN 提交了 package,他們要求我將 Rd 文件中的\donttest{}
\dontrun{}
為 \donttest{} 並重新提交。 我正在使用\dontrun{}
來包裝一些應該拋出錯誤消息的例子。
在將\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設置為假值來暫時規避。”
由於我打算將 package 重新提交給 CRAN,因此在本地將_R_CHECK_DONTTEST_EXAMPLES_
設置為false
對我沒有幫助。
我還在開發工具問題中發現了最近的討論,其中devtools
Wickham 指出:
“一般來說,現在如果你不想在 CRAN 上運行測試,\dontrun{} 更有可能工作,但使用 \dontrun{} 可能會導致初始提交失敗。”
所以現在我不知道如何繼續,因為如果我重新提交 package 並進行必要的更改,我已經知道它會在R CMD check --as-cran
中拋出錯誤,因此它可能無法通過 CRAN 的自動預測試。
編輯:
正如這里所建議的,我嘗試了if(interactive()){}
而不是\dontrun{}
。 此解決方案在R CMD check --as-cran
和devtools::check()
中成功,但我認為這不是解決此問題的最合適方法,因為它不能很好地與example()
一起使用(拋出錯誤並不顯示其余示例)。 \dontrun{}
與example()
一起使用效果更好,因為它打印所有示例,但注釋掉用\dontrun{}
包裹的示例。
我不認為 package 示例是“應該拋出錯誤消息的示例”的正確位置。
當您將這些“示例”移動到testthat單元測試時,您的問題將很容易解決。
有
expect_error()
expect_warning()
查看您的 package 是否按預期拋出警告/錯誤。
如果您真的想告知用戶他們應該避免輸入什么,也許您可以將其作為注釋添加到示例或其他文檔中(詳細信息,參數)
您在其他 package 示例中經常看到的內容如下:
## 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"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.