我正在用c ++编写一个使用c ++ rng产生随机数的类。构造函数将rng的种子作为参数。但是,当我使用rcpp软件包将类暴露给r时,设置种子将不起作用,因为即使我传递相同的种子,每次实例化该类的成员时我都会获得不同的随机数。有没有技巧在使用rcpp时如何在c ++中设置种子?很高兴获得我所有的帮助。

最佳答案

您要播种哪种RNG?如果是R,那么您或多或少就很不走运,因为编写R扩展明确指出您应该从R开始。

有一些解决方法(例如通过Rcpp::Function()),但也许您应该重新考虑问题。

但是,如果您正在播种自己的RNG,则它应该可以工作,并且可以用于我的RcppZiggurat包:

R> library(RcppZiggurat)
R> zsetseedLZLLV(12345)                 # set seed
R> zrnormLZLLV(3)
[1]  1.297770 -0.699053  0.443079
R> zsetseedLZLLV(12345)                 # re-set seed
R> zrnormLZLLV(3)
[1]  1.297770 -0.699053  0.443079       # same number
R> zrnormLZLLV(3)
[1] -0.405296 -1.771543  0.319896       # diff. now
R>


最后,如果您的问题是要让R函数使用RNG:这是可能的(再次,请参见编写R扩展),但可能不是一个好主意,因为调用runif()rnorm()的代码具有某些(隐式)期望动作关于什么会被称为。

关于c++ - 使用cpp从R设置C++ RNG种子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32908579/

10-12 17:23