9

単体テストでは、ヘルパー関数(テストデータの生成)を次のように開始します。

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  
4

1 に答える 1

13

RUnit単体テストにパッケージを使用しているようです。この場合、は乱数発生器 ( ) の種類RUnitに異なるデフォルトを使用することに注意する必要があります。RNGkind

RUnit のマニュアルと のヘルプから?defineTestSuite:

defineTestSuite(name, dirs, testFileRegexp = "^runit.+\\.[rR]$",
  testFuncRegexp = "^test.+",  
  rngKind = "Marsaglia-Multicarry",
  rngNormalKind = "Kinderman-Ramage")

のデフォルトは"Marsaglia-Multicarry"rngKindであることに注意してください。RUnit

ただし、ベース R では、デフォルトRNGkind"Mersenne-Twister"です。から?RNGkind:

現在利用可能な RNG の種類は次のとおりです。kind はこのリストに部分的に一致します。デフォルトは「メルセンヌ・ツイスター」です。


したがって、対話型の結果を の結果と一致させるには、対話型セッションまたは への最初の呼び出しのいずれかでRUnit、別の を設定する必要があります。RNGkinddefineTestSuite

于 2012-08-15T07:15:35.147 に答える