27

我在 R 和 Matlab 中为 2 个单独的分析生成数据,我想确定这两个系统中的结果是否相等。由于随机数生成器,这两组代码之间存在固有的可变性。如果可能的话,我想消除这种可变性的来源。有谁知道在 Matlab 和 R 中设置相同的起始种子的方法?我在下面提供了一些演示代码。

%Matlab code
seed=rng %save seed
matlabtime1=randn(1,5) %generate 5 random numbers from standard normal 
rng(seed) %get saved seed
matlabtime2=randn(1,5) %generates same output as matlabtime1

#R code
set.seed(3) #save seed
r.time1=rnorm(5) #generate 5 random numbers from standard normal 
set.seed(3) #get saved seed
r.time2=rnorm(5) #generates same output as r.time1

本质上,我希望 matlabtime2 和 r.time2 的结果完全匹配。(我使用的代码比这个说明性演示更复杂,因此仅用一种语言重写并不是一个真正可行的选择。)

4

1 回答 1

29

我发现很难在 R 和 MATLAB 中获得相同的随机数 - 即使对相同的算法使用相同的种子(Mersenne Twister)。

我想这是关于它们是如何实现的——即使使用相同的种子,它们也有不同的初始状态(您可以在 R 和 MATLAB 中打印和检查状态)。

过去,当我需要这个时,我会生成随机输入,将其保存为磁盘上的文件,然后将其提供给 MATLAB 和 R。

另一种选择是为 R 和 MATLAB 编写随机数生成器的 C 包装器(C/C++ 中有很多),并调用它们而不是内置的。

于 2012-05-31T05:03:29.953 回答