簡體   English   中英

在 CRAN 要求將 \dontrun{} 替換為 \donttest{} 后,R package 中的問題

[英]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-crandevtools::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM