Hi Gang: I was recently explaining to someone that functions like Rcpp::rnorm only take scalars. Since the R function takes vectors, the OP was asking me why? I didn¹t have a good answer. This morning, I started thinking about it and I realized this could easily be handled by over-loading (I know: that is why they call me Mr. Excitement ;o)
I don¹t know if these overloads would have to be written by hand or could be auto-generated. If the latter, then I guess it is a feature request. If not, then probably a friendly suggestion. But, here is a short example that shows it is feasible if there is any doubt. Happy Easter! Rodney The R transcript... > require(Rcpp) Loading required package: Rcpp > sourceCpp('rnorm.cpp') > set.seed(21) > rnorm(6, 0, 0.01/1:2) [1] 0.007930132 0.002611256 0.017462222 -0.006356681 0.021973895 [6] 0.002165654 > set.seed(21) > test0(6, 0, 0.01/1:2) [1] 0.007930132 0.002611256 0.017462222 -0.006356681 0.021973895 [6] 0.002165654 > set.seed(21) > rnorm(6, 0:1, 0.01) [1] 0.007930132 1.005222513 0.017462222 0.987286639 0.021973895 1.004331308 > set.seed(21) > test0(6, 0:1, 0.01) [1] 0.007930132 1.005222513 0.017462222 0.987286639 0.021973895 1.004331308 > set.seed(21) > rnorm(6, 0:2, 0.01/1:2) [1] 0.007930132 1.002611256 2.017462222 -0.006356681 1.021973895 [6] 2.002165654 > set.seed(21) > test0(6, 0:2, 0.01/1:2) [1] 0.007930132 1.002611256 2.017462222 -0.006356681 1.021973895 [6] 2.002165654 rnorm.cpp begin #include <Rcpp.h> Rcpp::NumericVector rnorm(int n, Rcpp::NumericVector mean, Rcpp::NumericVector sd) { const int k_mu=mean.size(), k_sd=sd.size(); Rcpp::NumericVector ret(n); for(int i=0; i<n; ++i) ret[i]=Rcpp::rnorm(1, mean[i%k_mu], sd[i%k_sd])[0]; return ret; } // [[Rcpp::export]] Rcpp::NumericVector test0(int n, Rcpp::NumericVector mean, Rcpp::NumericVector sd) { return rnorm(n, mean, sd); } rnorm.cpp end rnorm.R begin require(Rcpp) sourceCpp('rnorm.cpp') set.seed(21) rnorm(6, 0, 0.01/1:2) set.seed(21) test0(6, 0, 0.01/1:2) set.seed(21) rnorm(6, 0:1, 0.01) set.seed(21) test0(6, 0:1, 0.01) set.seed(21) rnorm(6, 0:2, 0.01/1:2) set.seed(21) test0(6, 0:2, 0.01/1:2) rnorm.R end _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel