В погрузочных именах для 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