Dans l'espace de noms de chargement pour le paquet caret
, je trouve la situation suivante:Chargement espace de noms caret invoque une fonction aléatoire?
# 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
Cela m'a donné du mal quand j'écris tests unitaires codes pour certaines fonctions dans lesquelles l'espace de noms caret
est chargé. Un exemple est le suivant:
fichier R/abn.R
:
abn <- function(){
requireNamespace('caret')
round(rnorm(1), 5)
}
fichier 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)
})
Vous pouvez voir ma solution de contournement.
Quelque chose me manque ici?
Existe-t-il un moyen authentique d'éviter cette situation?
Ou, cette solution de contournement peut aider les personnes ayant des problèmes similaires.
Cela semble être une bonne pratique d'utiliser 'set.seed()'. Je ne vois pas le besoin d'une "solution de contournement". –
Vous avez raison. Je peux utiliser -0.32623 pour les tests unitaires dans l'exemple. Mais des actions telles que le chargement des espaces de noms peuvent être répétées dans le code et si le caret est déjà chargé, le test échouera. Bien que n'étant pas un exemple, j'ai vécu la situation de passer-le-test mais échec-à-vérifier et résolu cette situation avec cette solution de contournement. Quoi qu'il en soit, surtout, je ne suis pas sûr que nous devrions faire attention à ce genre d'effet secondaire lors du chargement des espaces de noms. – skwon