如果不包括GetRNGstate()会出现什么问题?

时间:2016-03-03 03:58:29

标签: r rcpp

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

1 个答案:

答案 0 :(得分:5)

你错过了使用Rcpp属性包括它的事实,无论如何,它应该如此。尝试使用, verbose=TRUE进行构建以查看

 Rcpp::RNGScope __rngScope

为您插入自动魔法