私はヘルパー関数(テストデータを生成する)を開始:RUnitが乱数を変更するのはなぜですか?ユニットテストで
set.seed(1)
私は対話的にこのようなユニットテスト開発していた:
source('tests/runit.functions.R');test.something()
をしかし、その後、私は実行するために行ったとき私のrun_tests.R
からのテストは失敗しました。私はset.seed(1)
コマンドにもかかわらず、それを異なる乱数に絞りました!私は、(1)直後set.seed、この行を追加:
print(sessionInfo());print("RANDOM SEED:");print(.Random.seed)
本当に興味深い部分は、ランダムシードが全く異なっています。私の対話型のRセッションで、それは626要素のモンスターであるのに対し
501 1280795612 -169270483
:
[1] 403 624 -169270483 -442010614 ...
...
[617] 197184543 -2095148 ... -689249108
最初の数、501対403で、あるバッチスクリプトではそれだけで3つの数字であります明らかに乱数ジェネレータのタイプですが、数字が意味するもののマスターリストを追跡できませんでした。
私の質問の中核は、私の単体テストが確実な乱数生成を確実にするための最善の方法だと思いますか?副次的な質問は、トラブルシューティングのアドバイスです:どの乱数ジェネレータが使用されているか(さらに重要なのは)どのコード/パッケージ/設定がそれを使用することに決めたのかをどのように追跡するのですか?
sessionInfo
は非常に役に立たないようですが、若干の小さな違いがあります。例えば。 TTRパッケージが含まれているのは、他の単体テストが実行されているためです。ここでは最初の行は#!/usr/bin/Rscript --slave
あるバッチスクリプトからsessionInfo
出力は、次のとおりです。
R version 2.15.1 (2012-06-22)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.utf8 LC_NUMERIC=C LC_TIME=en_US.utf8 LC_COLLATE=en_US.utf8 LC_MONETARY=en_US.utf8 LC_MESSAGES=en_US.utf8
[7] LC_PAPER=C LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] methods stats graphics grDevices utils datasets base
other attached packages:
[1] TTR_0.21-1 xts_0.8-6 zoo_1.7-7 RUnit_0.4.26
loaded via a namespace (and not attached):
[1] grid_2.15.1 lattice_0.20-6
そして、ここではR --no-save
でコマンドラインから開始され、私の対話型のRセッションからの出力は、次のとおりです。
R version 2.15.1 (2012-06-22)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.utf8 LC_NUMERIC=C LC_TIME=en_US.utf8 LC_COLLATE=en_US.utf8 LC_MONETARY=en_US.utf8 LC_MESSAGES=en_US.utf8
[7] LC_PAPER=C LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] xts_0.8-6 zoo_1.7-7 RUnit_0.4.26
loaded via a namespace (and not attached):
[1] grid_2.15.1 lattice_0.20-6 tools_2.15.1
賢い、ありがとう。 'defineTestSuite'ヘルプから、「このデフォルトは歴史的な理由から選択されましたが、現在のR default_とは異なります」と書かれています。だから私はrun_tests.Rを使って、 'rngKind =" Mersenne-Twister "、rngNormalKind =" Inversion "'を変更しました。 –
+1これについて、奇妙な決定を知りませんでした。 – Hansi