[Rcpp-devel] Rcpp: Error: not compatible with requested type

Pierre Lafaye de Micheaux lafaye at dms.umontreal.ca
Sat Oct 4 00:19:05 CEST 2014


Dear Dirk,

Thank you very much for this. I modified slightly your own code so that 
it is very similar (for the names of the arguments) to the one on 
StackOverflow:
http://stackoverflow.com/questions/26181068/rcpp-error-not-compatible-with-requested-type

This gives me this code saved in /tmp/pierre.cpp:

-----------------------------------------------------------------------------------------------
#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::List gensampleRcpp2(Rcpp::Function rlawfunc, Rcpp::IntegerVector n) {
   Rcpp::RNGScope __rngScope;
   return Rcpp::List::create(Rcpp::Named("sample") = rlawfunc(n),
                             Rcpp::Named("law.name") = " ",
                             Rcpp::Named("law.pars") = R_NilValue);
}

// [[Rcpp::export]]
Rcpp::List compQuantRcpp2(Rcpp::IntegerVector n, Rcpp::IntegerVector M, 
Rcpp::Function Rlaw) {
   int i;
   GetRNGstate();
   for (i=1;i<=M[0];i++) {
     Rcpp::List resultsample = gensampleRcpp2(Rlaw, n);
     Rcpp::NumericVector mysample = resultsample["sample"];
   }
    PutRNGstate();
    return Rcpp::List::create(Rcpp::Named("law.pars") = "");
}


/*** R
res <- compQuantRcpp2(n=50, M=10^3, Rlaw=rnorm)
print(str(res))
*/
-----------------------------------------------------------------------------------------------

Please have a look to compare both codes. They are very similar.

I then issue this command in R:
for (i in 1:100)  Rcpp::sourceCpp("tmp/pierre.cpp")

Magic! No error occur.

So now I will try to implement all this in a package (I guess I should 
read more carefully the Attributes vignette that you told me about. Am I 
right? Is it the good document to read for that purpose?).

By the way, since both codes are such similar, would you have an 
explanation on what goes wrong with what I have written on StackOverflow?

Regards,

Pierre L.



Le 03/10/2014 12:49, Dirk Eddelbuettel a écrit :
> Oh, and I missed one call to a subordinate function.  So add
>
> // [[Rcpp::export]]
> SEXP newCompQuant2(int n, int M, Rcpp::Function f) {
>    SEXP res = compquantRcpp2(n, M, f);
>    return res;
> }
>
> and at the bottom call it:
>
> res <- newCompQuant2(n=50, M=10^3, f=rnorm)
> print(str(res))
>
> and then the result is
>
> R> res <- newCompQuant2(n=50, M=10^3, f=rnorm)
>
> R> print(str(res))
> List of 1
>   $ law.pars: chr ""
> NULL
> R>
>
> just like you were told as well on StackOverflow.
>
> Dirk
>



More information about the Rcpp-devel mailing list