在单元测试中,我启动了一个辅助函数(生成测试数据):
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)
真正有趣的部分是随机种子完全不同。在批处理脚本中只有三个数字:
501 1280795612 -169270483
而在我的交互式 R 会话中,它是一个 626 元素的怪物:
[1] 403 624 -169270483 -442010614 ...
...
[617] 197184543 -2095148 ... -689249108
第一个数字,501 与 403,显然是随机数生成器的类型,但我无法在主列表中找到这些数字的含义。
我认为我的问题的核心是确保我的单元测试具有可靠的随机数生成的最佳方法是什么?第二个问题是故障排除建议:我如何跟踪正在使用哪个随机数生成器(更重要的是)哪个代码/包/设置决定使用它?
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