GetRNGstate()
和PutRNGstate()
对我来说是个谜。我已阅读编写R扩展程序的第6.3节,但它只说" 用户必须调用"它们和" 这些基本上是读入(或创建).Random.seed并在使用后写出"。
我最初认为如果我没有包含它们,那么R中的set.seed()
函数将无法处理我的Rcpp函数。所以我做了一些实验,但事实证明没有GetRNGstate()
和PutRNGstate()
似乎没有错。我觉得我必须遗漏一些东西,为什么以及何时应该包含这两个功能?
以下是我自己的实验:
// [[Rcpp::export]]
NumericVector myrv4(int n) {
NumericVector x = rnorm(n, 0.0, 1.0);
return x;
}
我的测试结果:
> n <- 2
> set.seed(1234)
> myrv4(n)
[1] -1.2070657 0.2774292
> set.seed(1234)
> myrv4(n)
[1] -1.2070657 0.2774292
答案 0 :(得分:5)
你错过了使用Rcpp属性包括它的事实,无论如何,它应该如此。尝试使用, verbose=TRUE
进行构建以查看
Rcpp::RNGScope __rngScope
为您插入自动魔法。