在裝載命名空間caret
包,我發現了以下情況:加載插入符名稱空間調用隨機函數?
# 1.
set.seed(1)
print(rnorm(1)) # -0.6264538
# 2. Restart R session
# 3.
set.seed(1)
loadNamespace('caret')
print(rnorm(1)) # -0.3262334
# 4. Restart R session
# 5.
loadNamespace('caret')
set.seed(1)
loadNamespace('caret')
print(rnorm(1)) # -0.6264538
這給了我麻煩,當我寫了其中caret
命名空間加載一些功能單元測試代碼。一個例子如下:
文件R/abn.R
:
abn <- function(){
requireNamespace('caret')
round(rnorm(1), 5)
}
文件tests/testthat/test_abn.R
:
context("Test abnomality")
test_that("Anomaly situation", {
requireNamespace('caret') # Without this line, devtools::check() will fail
# abn() not equal to -0.62645.
# 1/1 mismatches
# [1] -0.326 - -0.626 == 0.3
set.seed(1)
expect_equal(abn(), -0.62645)
})
你可以看到我的解決辦法的解決方案。
我想念這裏的東西嗎?
有沒有一種可靠的方法來避免這種情況?
或者,這種解決方法可能會幫助遇到類似麻煩的人。
看起來像使用'set.seed()'的好習慣。我不認爲需要「解決方法」。 –
你是對的。在示例中,我可以使用-0.32623進行單元測試。但是,可以在代碼中重複加載名稱空間等操作,並且如果已經加載了脫字符號,測試將會失敗。雖然沒有例子,但我經歷了通過測試但檢查失敗的情況,並通過該解決方法解決了這種情況。無論如何,最重要的是,我不確定加載名稱空間時應該注意這種副作用。 – skwon