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: [email protected]
[mailto:[email protected]] On Behalf Of Shuai Wang
Sent: Sunday, October 18, 2015 11:13 AM
To: [email protected]; Shuai Wang <[email protected]>
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
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel