[Rcpp-devel] Vectorized version of rbinom function via Rcpp

Dirk Eddelbuettel edd at debian.org
Thu Oct 25 16:29:50 CEST 2012

Hi Carsten,

On 25 October 2012 at 16:05, carsten Gerken wrote:
| Hi All,
| I am trying to outsource the simulation of binomially distributed random
| variables to C++ via Rcpp (e.g. to replicate the R command rbinom(10,10,c(1:10)
| /20)). This works well as long as the third argument of the function (i.e. the
| probability) is a single value and not a vector. I tried to compile the
| following code:

[ Some editing here ]
 rbinom_c <- rcpp( signature(n = "integer",m = "integer",p="numeric"), body="
   int N = as<int>(n); 
   int M = as<int>(m); 
   NumericVector P = NumericVector(p);
   NumericVector res = rbinom(N,M,P); 
   return res; 

| But the compiler expects a “double” variable in the third argument.

Correct, as I recall.  Some (common) things are vectors, some are scalars.
As a simple example in rnorm(n, m, s) the mean m and stdev s are expected to
be scalars.

| Is there a
| way of fixing the code without using an explicit loop in the C++ code?

I don't think so. The code currently has this hard-wired:

	inline NumericVector rbinom( int n, double nin, double pp ){
		return NumericVector( n, ::Rf_rbinom, nin, pp) ;

so until one of us has sufficient to extend this (and test it) will have to
do the loop at your end. 

As always, patches would be welcomed. :)


Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com  

More information about the Rcpp-devel mailing list