Poisson draw in Rcpp 和 R 不同的结果

Poisson draw in Rcpp and R different results

当我在 RRcpp

中使用相同的代码时,我遇到了以下矛盾

R我运行下面的代码

t = 0
for(i in 1:50){
 t = t + rpois(1, 0.5)
}
t
[1] 28

然后我取回一个非负值t。现在我在 Rcpp

中键入完全相同的命令
#include <Rcpp.h>
#include<Rmath.h>
using namespace Rcpp;

// [[Rcpp::export]]
int Pois(int l){ 
  int t=0;
  for(int i=0; i<50;++i){
    t+=R::rpois(l);
  }
  return t;
}

当我调用 R

中的函数时
Pois(0.5)
[1] 0

这是错误的,因为在 R 中它不同于零

出了什么问题?

您应该使用 double l 而不是 int l,例如

int Pois(double l){ 
  int t=0;
  for(int i=0; i<50;++i){
    t+=R::rpois(l);
  }
  return t;
}

否则 (int) 0.5 给你 0.

@ThomasIsCoding 已经向您展示了主要问题。但请记住,除了 R::rpois() 我们还有向量化的 Rcpp::rpois()。而且,像往常一样,给定相同的种子,它给出与 R:

相同的平局
> set.seed(123)
> rpois(10, 0.5)
 [1] 0 1 0 1 2 0 0 1 0 0
> Rcpp::cppFunction("NumericVector myrp(int n, double l) { return Rcpp::rpois(n, l); }")
> set.seed(123)
> myrp(10, 0.5)
 [1] 0 1 0 1 2 0 0 1 0 0
>