Greetings and Salutations, At this code: Rcpp::NumericVector JJ(15); // creates a vector with 15 spaces JJ[0] = 15; // fills only the first space
You have only initiated slot 0 to 15. The remaining slots (1-14) are uninitialized at 0. You probably want to use: Rcpp::IntegerVector JJ = seq_len( 10 ) ; // creates 1:10 vector Why? Z[i] <- sample(15, 1, replace = FALSE, prob = (exp(prob - deno))) The 15 really is being converted to a vector ranging from 1:15. Sincerely, JJB From: rcpp-devel-boun...@lists.r-forge.r-project.org [mailto:rcpp-devel-boun...@lists.r-forge.r-project.org] On Behalf Of Shuai Wang Sent: Sunday, October 18, 2015 11:13 AM To: rcpp-devel@lists.r-forge.r-project.org; Shuai Wang <wangshuai...@gmail.com> Subject: [Rcpp-devel] Incorrect results from RcppArmadillo::sample Dear list, I am a newbie to rcpp and currently I am trying to translate some R code into C++ code. In particular, when I was trying to translate the following R code into C++ code: Z[i] <- sample(15, 1, replace = FALSE, prob = (exp(prob - deno))) I found some errors in my C code, which troubles me a lot. Let's elaborate a little bit. I found that Rcpp does not provide a sample function, so I follow the instructions here<https://urldefense.proofpoint.com/v2/url?u=http-3A__gallery.rcpp.org_articles_using-2Dthe-2DRcpp-2Dbased-2Dsample-2Dimplementation_&d=BQMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Oj62bnDE1oueLU-seL9f0p1xxu4Hvw2JDuP8BUw91c8&m=u0jDj4G8ZcHg4HCnGUSLEH17Y_2FH4CvUX-OVZ6OfcU&s=hh6uiDHmyqu_RGmNuCJSz_eLVL316VejIhtlWtDKZ4c&e=> to use RcppArmadillo::sample. However, even though the first parameter of sample function in R can be a integer: function (x, size, replace = FALSE, prob = NULL) { if (length(x) == 1L && is.numeric(x) && x >= 1) { if (missing(size)) size <- x sample.int<https://urldefense.proofpoint.com/v2/url?u=http-3A__sample.int&d=BQMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Oj62bnDE1oueLU-seL9f0p1xxu4Hvw2JDuP8BUw91c8&m=u0jDj4G8ZcHg4HCnGUSLEH17Y_2FH4CvUX-OVZ6OfcU&s=iBH3eCHMnRMHQ2mwiTNPV9k72ZAypzKfwhCrOe3o0fc&e=>(x, size, replace, prob) } else { if (missing(size)) size <- length(x) x[sample.int<https://urldefense.proofpoint.com/v2/url?u=http-3A__sample.int&d=BQMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Oj62bnDE1oueLU-seL9f0p1xxu4Hvw2JDuP8BUw91c8&m=u0jDj4G8ZcHg4HCnGUSLEH17Y_2FH4CvUX-OVZ6OfcU&s=iBH3eCHMnRMHQ2mwiTNPV9k72ZAypzKfwhCrOe3o0fc&e=>(length(x), size, replace, prob)] } } I figure out that the first parameter of RcppArmadillo::sample cannot be a integer, it only accepts a vector. So given my R code, I translate it into the following C code. Rcpp:NumericVector JJ(15); JJ[0] = 15; Z[i-1] = RcppArmadillo::sample(JJ, 1, false, (exp(prob - deno)))[0]; Then I found some errors in the above code, say, while in the original R code, Z[i] is a random number between 1 and 15, in the above C code, Z[i-1] is either 0 or 15. Am I clear? Could anyone give me some help on this issue? Thank you a lot! Shuai
_______________________________________________ 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