単体テストでは、ヘルパー関数(テストデータの生成)を次のように開始します。
set.seed(1)
私は次のようにインタラクティブに単体テストを開発していました。
source('tests/runit.functions.R');test.something()
しかし、私が自分からテストを実行しようとすると、run_tests.R
失敗しました。set.seed(1)
コマンドにもかかわらず、私はそれを異なる乱数に絞り込みました!set.seed(1)の直後にこの行を追加しました:
print(sessionInfo());print("RANDOM SEED:");print(.Random.seed)
本当に興味深い部分は、ランダムシードがまったく異なることです。バッチスクリプトでは、次の3つの数字だけです。
501 1280795612 -169270483
私のインタラクティブなRセッションでは、それは626要素のモンスターです。
[1] 403 624 -169270483 -442010614 ...
...
[617] 197184543 -2095148 ... -689249108
最初の数字である501対403は、明らかに乱数ジェネレーターのタイプですが、数字の意味についてマスターリストを追跡することはできませんでした。
私の質問の核心は、ユニットテストで信頼できる乱数を生成できるようにするための最良の方法は何だと思いますか?2番目の質問はトラブルシューティングのアドバイスです:どの乱数ジェネレーターが使用されているか(そしてもっと重要なことに)どのコード/パッケージ/設定がそれを使用することを決定したかを追跡するにはどうすればよいですか?
はsessionInfo
あまり役に立たないように見えますが、いくつかの小さな違いが見られます。たとえば、TTRパッケージが含まれているのは、他の単体テストが実行されているためです。sessionInfo
バッチスクリプトからの出力は次のとおりです。最初の行は次の#!/usr/bin/Rscript --slave
とおりです。
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セッションからの出力です。これはコマンドラインから次のように開始されR --no-save
ます。
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