<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Dear members of the list,<br>
    <br>
    I have a problem using Rcpp in one of my packages. It tried the best
    I could to simplify my code so that the error is reproducible and
    this is what I was able to obtain. <br>
    The code is self contain (really, I checked) and as minimal as
    possible (at least for me, sorry for not being able to simplify it
    further).<br>
    <br>
    I work under Linux with R 3.1.1.<br>
    <br>
    I have this C++ code:<br>
    <pre style="" class="lang-r prettyprint prettyprinted"><code><span class="com">#include <R.h></span><span class="pln">
</span><span class="com">#include <Rcpp.h></span><span class="pln">
using namespace Rcpp</span><span class="pun">;</span><span class="pln">
extern </span><span class="str">"C"</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  SEXP gensampleRcpp2</span><span class="pun">(</span><span class="pln"> Function rlawfunc</span><span class="pun">,</span><span class="pln"> SEXP n</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    Rcpp</span><span class="pun">::</span><span class="pln">RNGScope __rngScope</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> Rcpp</span><span class="pun">::</span><span class="pln">List</span><span class="pun">::</span><span class="pln">create</span><span class="pun">(</span><span class="pln">Rcpp</span><span class="pun">::</span><span class="pln">Named</span><span class="pun">(</span><span class="str">"sample"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> rlawfunc</span><span class="pun">(</span><span class="pln">n</span><span class="pun">),</span><span class="pln">
                   Rcpp</span><span class="pun">::</span><span class="pln">Named</span><span class="pun">(</span><span class="str">"law.name"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">" "</span><span class="pun">,</span><span class="pln">
                   Rcpp</span><span class="pun">::</span><span class="pln">Named</span><span class="pun">(</span><span class="str">"law.pars"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> R_NilValue</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  RcppExport SEXP gensampleRcpp</span><span class="pun">(</span><span class="pln">SEXP rlawfuncSEXP</span><span class="pun">,</span><span class="pln"> SEXP nSEXP</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    BEGIN_RCPP
    Function rlawfunc </span><span class="pun">=</span><span class="pln"> Rcpp</span><span class="pun">::</span><span class="pln">as</span><span class="pun"><</span><span class="pln">Function </span><span class="pun">>(</span><span class="pln">rlawfuncSEXP</span><span class="pun">);</span><span class="pln">
    IntegerVector n </span><span class="pun">=</span><span class="pln"> Rcpp</span><span class="pun">::</span><span class="pln">as</span><span class="pun"><</span><span class="pln">IntegerVector </span><span class="pun">>(</span><span class="pln">nSEXP</span><span class="pun">);</span><span class="pln">
    SEXP __result </span><span class="pun">=</span><span class="pln"> gensampleRcpp2</span><span class="pun">(</span><span class="pln">rlawfunc</span><span class="pun">,</span><span class="pln"> n</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> Rcpp</span><span class="pun">::</span><span class="pln">wrap</span><span class="pun">(</span><span class="pln">__result</span><span class="pun">);</span><span class="pln">
    END_RCPP
      </span><span class="pun">}</span><span class="pln">

  SEXP compquantRcpp2</span><span class="pun">(</span><span class="pln">IntegerVector n</span><span class="pun">,</span><span class="pln"> IntegerVector M</span><span class="pun">,</span><span class="pln"> Function Rlaw</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    int i</span><span class="pun">;</span><span class="pln">
    GetRNGstate</span><span class="pun">();</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="pln">i</span><span class="pun">=</span><span class="lit">1</span><span class="pun">;</span><span class="pln">i</span><span class="pun"><=</span><span class="pln">M</span><span class="pun">[</span><span class="lit">0</span><span class="pun">];</span><span class="pln">i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    List resultsample </span><span class="pun">=</span><span class="pln"> gensampleRcpp2</span><span class="pun">(</span><span class="pln">Rlaw</span><span class="pun">,</span><span class="pln"> n</span><span class="pun">);</span><span class="pln">
    NumericVector mysample </span><span class="pun">=</span><span class="pln"> Rcpp</span><span class="pun">::</span><span class="pln">as</span><span class="pun"><</span><span class="pln">NumericVector </span><span class="pun">>(</span><span class="pln">resultsample</span><span class="pun">[</span><span class="str">"sample"</span><span class="pun">]);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    PutRNGstate</span><span class="pun">();</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> Rcpp</span><span class="pun">::</span><span class="pln">List</span><span class="pun">::</span><span class="pln">create</span><span class="pun">(</span><span class="pln">Rcpp</span><span class="pun">::</span><span class="pln">Named</span><span class="pun">(</span><span class="str">"law.pars"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  RcppExport SEXP compquantRcpp</span><span class="pun">(</span><span class="pln">SEXP nSEXP</span><span class="pun">,</span><span class="pln"> SEXP MSEXP</span><span class="pun">,</span><span class="pln"> SEXP RlawSEXP</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    BEGIN_RCPP
    IntegerVector n </span><span class="pun">=</span><span class="pln"> Rcpp</span><span class="pun">::</span><span class="pln">as</span><span class="pun"><</span><span class="pln">IntegerVector </span><span class="pun">>(</span><span class="pln">nSEXP</span><span class="pun">);</span><span class="pln">
    IntegerVector M </span><span class="pun">=</span><span class="pln"> Rcpp</span><span class="pun">::</span><span class="pln">as</span><span class="pun"><</span><span class="pln">IntegerVector </span><span class="pun">>(</span><span class="pln">MSEXP</span><span class="pun">);</span><span class="pln">
    Function Rlaw </span><span class="pun">=</span><span class="pln"> Rcpp</span><span class="pun">::</span><span class="pln">as</span><span class="pun"><</span><span class="pln">Function </span><span class="pun">>(</span><span class="pln">RlawSEXP</span><span class="pun">);</span><span class="pln">
    SEXP __result </span><span class="pun">=</span><span class="pln"> compquantRcpp2</span><span class="pun">(</span><span class="pln">n</span><span class="pun">,</span><span class="pln"> M</span><span class="pun">,</span><span class="pln"> Rlaw</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> Rcpp</span><span class="pun">::</span><span class="pln">wrap</span><span class="pun">(</span><span class="pln">__result</span><span class="pun">);</span><span class="pln">
    END_RCPP
      </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></code></pre>
    and this R code:<br>
    <pre style="" class="lang-r prettyprint prettyprinted"><code><span class="pln">compquant </span><span class="pun"><-</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">n</span><span class="pun">=</span><span class="lit">50</span><span class="pun">,</span><span class="pln">M</span><span class="pun">=</span><span class="lit">10</span><span class="pun">^</span><span class="lit">3</span><span class="pun">,</span><span class="pln">Rlaw</span><span class="pun">=</span><span class="pln">rnorm</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  out </span><span class="pun"><-</span><span class="pln"> .Call</span><span class="pun">(</span><span class="str">"compquantRcpp"</span><span class="pun">,</span><span class="pln">n</span><span class="pun">=</span><span class="pln">as.integer</span><span class="pun">(</span><span class="pln">n</span><span class="pun">),</span><span class="pln">M</span><span class="pun">=</span><span class="pln">as.integer</span><span class="pun">(</span><span class="pln">M</span><span class="pun">),</span><span class="pln">as.function</span><span class="pun">(</span><span class="pln">Rlaw</span><span class="pun">),</span><span class="pln">PACKAGE</span><span class="pun">=</span><span class="str">"PoweR"</span><span class="pun">)</span><span class="pln"> 
  </span><span class="kwd">return</span><span class="pun">(</span><span class="pln">out</span><span class="pun">)</span><span class="pln">
</span><span class="pun">}</span></code></pre>
    in a package called PoweR (in fact the above codes are
    simplifications of my own code so do no try to understand the
    statistical purpose of it). <br>
    <br>
    When I compile my package (under Linux and R version 3.1.0) and
    issue the following R command in the console:<br>
    <pre style="" class="lang-r prettyprint prettyprinted"><code><span class="pln">require</span><span class="pun">(</span><span class="pln">PoweR</span><span class="pun">)</span><span class="pln">
compquant</span><span class="pun">()

</span></code></pre>
    <p>I get the following error:
      <strong>Error: not compatible with requested type</strong></p>
    <p>Do you have any idea on what could be the problem and how to
      solve it? Or any idea on simplifying further?<br>
    </p>
    <p>Many thanks in advance for any idea.<br>
    </p>
    <p>Best regards,<br>
    </p>
    <p>Pierre Lafaye de Micheaux<br>
      <br>
    </p>
  </body>
</html>