Brilliant, Dirk. Thanks for that. Next time, I'll read the Rcpp Sugar .pdf more carefully. Cheers,
On 13/04/11 12:43, Dirk Eddelbuettel wrote:
On 13 April 2011 at 12:19, Cedric Ginestet wrote: | Hi guys, | | I want to produce discrete uniform variates within C++ from the runif() | function available through Rcpp Sugar. However, I don't seem to be able to find | the appropriate cast in order to return an IntegerVector as opposed to a | numeric one. I have naively used int(), but this is clearly not sufficient. | | Any help would be greatly appreciated, | Ced | | ########################################## | #### Discrete uniform variate. | src<- ' | using namespace Rcpp ; | RNGScope scope; | int n = as<int>(xn); | int a = as<int>(xa); | int b = as<int>(xb); | IntegerVector vec(n); | for(int i=0; i<n; ++i) vec[i] = (int)floor(runif(i,a,b)); | return vec;' | cxxfun<- cxxfunction(sig=signature(xn="numeric",xa="numeric",xb= | "numeric"),body=src,plugin="Rcpp",verbose=TRUE) | cxxfun(10,0,10); | | ########################## | Error in compileCode(f, code, language = language, verbose = verbose) : | Compilation ERROR, function(s)/method(s) not created! file52d217df.cpp: In | function ?SEXPREC* file52d217df(SEXPREC*, SEXPREC*, SEXPREC*)?: | file52d217df.cpp:37: error: invalid cast from type ?Rcpp::sugar::SugarMath_1 |<true, double, double, Rcpp::Vector<14>, double (*)(double)>? to type ?int? | make: *** [file52d217df.o] Error 1 | ################################################## Well as a start maybe try this as your loop: for (int i=0; i<n; ++i) { double tmp = runif(1,a,b)); // why where you using i here? vec[i] = static_cast<int>(tmp); // C++ static cast } But you do of course understand that a) Rcpp sugar can draw an entire vector at once and b) Rcpp sugar also has a vectorised floor() function right? So with that try R> src<- ' + RNGScope scope; + int n = as<int>(xn); + int a = as<int>(xa); + int b = as<int>(xb); + IntegerVector vec(n); + vec = floor(runif(n,a,b)); + return vec;' R> cxxfun<- cxxfunction(sig=signature(xn="numeric",xa="numeric",xb="numeric"), + body=src,plugin="Rcpp") R> cxxfun(10,0,10); [1] 8 5 1 7 0 0 6 9 8 1 R> Hth, Dirk | -- | Cedric Ginestet | Centre for Neuroimaging Sciences (L3.04) | NIHR Biomedical Research Centre | Department of Neuroimaging | Institute of Psychiatry, Box P089 | King's College London | De Crespigny Park | London | SE5 8AF | | ---------------------------------------------------------------------- | _______________________________________________ | 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
_______________________________________________ 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