2016-03-03 95 views
2

GetRNGstate()PutRNGstate()对我来说是神秘的。我已阅读的第6.3部分编写R扩展但它只说“用户必须调用”它们和“这些基本上读入(或创建).Random.seed并在使用后写出来”。如果不包括GetRNGstate()会出现什么问题?

我最初认为如果我没有包括它们,那么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 

回答

4

你错过了使用RCPP属性包括它你的,因为它应该的事实。尝试用, verbose=TRUE建设看

Rcpp::RNGScope __rngScope 

插入自动魔法 -ally你。

+0

非常感谢!这完全回答了我的问题! – Bayesric

+0

听起来很棒 - 随意在StackOverflow上常见的“接受”(点击标记)和/或“upvote”(点击向上三角形)。 –