是否(以及何时)Rcpp代码中需要RNGScope范围?

时间:2016-07-14 19:47:09

标签: r rcpp

使用Rcpp时需要RNGScope scope?通常,您在使用C RNG功能时need it。在某些地方,您可以在使用Rcpp时看到它是not neededRcpp documentation中的示例使用它,Dirk Eddelbuettel use it的一些示例,而其他地方不喜欢this onethis没有。所以最后我很困惑......

何时需要,何时不需要?如果我使用Rcpp::runif()R::runif()R::unif_rand(),会有所不同吗?我很感兴趣的是在R包中使用Rcpp而不是调用独立代码。

1 个答案:

答案 0 :(得分:4)

简而言之:

  • 每当调用R的C API的RNG时,您需要保存并稍后重新设置状态
  • RNGScope为您自动化,因为它非常有用(而且通常很便宜)
  • 每当您使用Rcpp属性时,它都会插入verbose=TRUE(正如您在启用R::时所看到的那样

所以一般来说你不需要任何手动 - 除非你去真正的旧学校并直接编写所有代码,除了Rcpp提供的胶水。

如果您使用Rcpp,那么您是使用Rcpp Sugar命名空间中的标量接口还是通过Rcpp::使用矢量化RNGScope onces无关紧要。 auto unmannedString = msclr::interop::marshal_as<std::string>(managedString); 将在那里为您服务。