R和C++中的随机数

Jam*_*mes 2 c++ r random-sample

假设我想要生成10个随机数的向量.我怎样才能在R和c ++中这样做,以便得到相同的向量?

我知道在C++中我必须使用srand()然后使用rand()而在RI中可以使用set.seed()然后使用runif.

但是我怎么能让他们变得一样呢?

Dir*_*tel 11

如果您使用C API来的R -或者更好的是,该RCPP接口,用于C++建立在它之上-那么你得到方便地访问来自同一发电机流.

R> library(Rcpp)    # load Rcpp
R> cppFunction("NumericVector myrnorm(int n) { return rnorm(n); }")
R> # now we have a C++ function access n N(0,1) numbers
R> set.seed(41); myrnorm(3)
[1] -0.794368  0.197258  1.001704
R> 
R> # same thing in R
R> set.seed(41)
R> rnorm(3)
[1] -0.794368  0.197258  1.001704
R> 
Run Code Online (Sandbox Code Playgroud)

您注意到它们在给定相同种子的情况下都生成相同的数字.这是一个功能.

现在,您还可以从C++代码将自己的RNG生成器带到R中.我这样做,例如在RcppZiggurat包也是在CRAN上.