Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Rcpp和R中生成相同的随机变量_R_Debugging_Rcpp_Sampling - Fatal编程技术网

在Rcpp和R中生成相同的随机变量

在Rcpp和R中生成相同的随机变量,r,debugging,rcpp,sampling,R,Debugging,Rcpp,Sampling,我正在将我的采样算法从R转换为Rcpp。Rcpp和R的输出不匹配Rcpp代码中存在一些错误(由于随机化,差异并没有不同)。我试图将Rcpp的内部变量与R代码中的内部变量进行匹配。然而,这是有问题的,因为来自分布的采样器导致随机化 Rcpp::rbinom(1, 1, 10) rbinom(1, 1, 10) 如何使代码在R和Rcpp中给出相同的输出,我的意思是从R和Rcpp设置一个公共种子?您在这里遇到了许多问题: rbinom(1,1,10)毫无意义,它会给你“警告信息:在rbin

我正在将我的采样算法从R转换为Rcpp。Rcpp和R的输出不匹配Rcpp代码中存在一些错误(由于随机化,差异并没有不同)。我试图将Rcpp的内部变量与R代码中的内部变量进行匹配。然而,这是有问题的,因为来自分布的采样器导致随机化

 Rcpp::rbinom(1, 1, 10) 
 rbinom(1, 1, 10)  

如何使代码在R和Rcpp中给出相同的输出,我的意思是从R和Rcpp设置一个公共种子?

您在这里遇到了许多问题:

  • rbinom(1,1,10)
    毫无意义,它会给你“警告信息:在rbinom(1,1,10)中:NAs已生产”(我在这里加入了两行以显示)

  • 假设您编写了
    rbinom(10,1,0.5)
    ,它将从绘制一或零的
    p=0.5的二项式生成10个绘制

  • Rcpp文档非常清楚如何通过
    RNGScope
    对象使用相同的RNG和相同的种子,这些对象是通过Rcpp属性免费获得的(见下文)

  • 因此,请见证这一点(这里有一个适合第一行的缩进)

    我定义、编译、链接和加载一个自定义C++函数<代码> CPPRIOMO()/<代码>。然后我设置种子,并检索10个值。重置种子并在相同参数化下检索十个值会得到相同的值


    这将适用于所有随机分布,除非我们引入了可能发生的错误

    您在这里遇到了许多问题:

  • rbinom(1,1,10)
    毫无意义,它会给你“警告信息:在rbinom(1,1,10)中:NAs已生产”(我在这里加入了两行以显示)

  • 假设您编写了
    rbinom(10,1,0.5)
    ,它将从绘制一或零的
    p=0.5的二项式生成10个绘制

  • Rcpp文档非常清楚如何通过
    RNGScope
    对象使用相同的RNG和相同的种子,这些对象是通过Rcpp属性免费获得的(见下文)

  • 因此,请见证这一点(这里有一个适合第一行的缩进)

    我定义、编译、链接和加载一个自定义C++函数<代码> CPPRIOMO()/<代码>。然后我设置种子,并检索10个值。重置种子并在相同参数化下检索十个值会得到相同的值


    这将适用于所有随机分布,除非我们引入了可能发生的错误

    请提供一个可复制的示例。请参阅;特别是
    RNGScope
    部分。请提供一个可复制的示例。请参阅;特别是
    RNGScope
    部分。
    R> cppFunction("NumericVector cpprbinom(int n, double size, double prob) { \
          return(rbinom(n, size, prob)); }")
    R> set.seed(42); cpprbinom(10, 1, 0.5)
     [1] 1 1 0 1 1 1 1 0 1 1
    R> set.seed(42); rbinom(10,1,0.5)
     [1] 1 1 0 1 1 1 1 0 1 1
    R>