Hi Dirk,<div><br></div><div>Thanks for straightening me out about the documentation issues belonging to base R instead of Rcpp. I should have checked that first.</div><div><br></div><div>And your point about inline not really being a "package-able" thing makes sense. I was able to force my toy inlineExample package to install by</div>

<div><ol><li>using the `code_files` argument, </li><li>deleting the `*.Rd` files in `man/` and </li><li>modifying DESCRIPTION to include `inline` for `Depends:` and `LinkingTo:` </li></ol><div>But then when I fire up a session of R and try to use it: </div>

</div><div><br></div><div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><div>> require(inlineExample)</div><div>Loading required package: inlineExample</div><div>Loading required package: Rcpp</div>

<div>Loading required package: RcppArmadillo</div><div>Loading required package: inline</div><div>></div><div>> plus.two.cpp( matrix(1:12, ncol=3))</div><div>Error in .Primitive(".Call")(<pointer: (nil)>, UmatrixR) : </div>

<div>  NULL value passed as symbol address</div><div>></div><div>> plus.two.cpp</div><div>An object of class "CFunc"</div><div>function (UmatrixR) </div><div>.Primitive(".Call")(<pointer: (nil)>, UmatrixR)</div>

<div><environment: 0x2f28370></div><div>Slot "code":</div><div>[1] "\n// includes from the plugin\n#include <RcppArmadillo.h>\n#include <Rcpp.h>\n\n\n#ifndef BEGIN_RCPP\n#define BEGIN_RCPP\n#endif\n\n#ifndef END_RCPP\n#define END_RCPP\n#endif\n\nusing namespace Rcpp;\n\n\n// user includes\n\n\n// declarations\nextern \"C\" {\nSEXP file2f8c4cc10657( SEXP UmatrixR) ;\n}\n\n// definition\n\nSEXP file2f8c4cc10657( SEXP UmatrixR ){\nBEGIN_RCPP\n\n  arma::mat U = Rcpp::as<arma::mat>(UmatrixR);\n  return(Rcpp::wrap(U+2));\n\nEND_RCPP\n}\n\n\n"</div>

</div><div><br></div></div></blockquote>It fails. To my untrained eyes it seems that:</div><div><ol><li>the code that `inline` compiled never got copied by *.package.skeleton to the "right" part of the directory skeleton for later compilation by the R build process, and </li>

<li>failing that the 'code_files' argument does not cause R to source those *.R files when the package is loaded. </li></ol><div>Thinking about this further, it seems like (2) would be a really bad idea because it would force the user to compile the code every time they loaded their package. That would both exclude all users who require binary only packages and just simply be really inefficient. </div>

<div><br></div><div>And (1) seems technically possible, but I don't know how involved that kind of fix would be. I seems like a really low priority edge case. How often do you have users who are sophisticated enough to try to make an R package that don't know how to translate their `inline` script to the more robust R build process? At least one! But probably not more than that... </div>

<div><br></div><div>So I'll post this as a question on stackexchange so that people can easily find the answer. </div><div><br></div><div>Thanks for your help. Rcpp and its friends are really awesome. Thanks for building them and supporting them! </div>

<div><br></div><div>Cheers,</div><div><br></div></div><div>Nathan</div><div><br><div class="gmail_quote">On Wed, Jul 11, 2012 at 8:32 PM, Dirk Eddelbuettel <span dir="ltr"><<a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
Nathan,<br>
<br>
Two more comments. First, I am not sure you can even do what you did.  When I<br>
call Rcpp.armadillo.package() as (where I omit the R file argument -- no<br>
point including a file loading inline in a package, or redefining these<br>
functions)<br>
<br>
  RcppArmadillo.package.skeleton(name='inlineExample',list=c('plus.two.cpp','plus.two.r'))<br>
<br>
I get<br>
<br>
R> RcppArmadillo.package.skeleton(name='inlineExample',list=c('plus.two.cpp','plus.two.r'))<br>
Creating directories ...<br>
Creating DESCRIPTION ...<br>
Creating NAMESPACE ...<br>
Creating Read-and-delete-me ...<br>
Saving functions and data ...<br>
Making help files ...<br>
Done.<br>
Further steps are described in './inlineExample/Read-and-delete-me'.<br>
<br>
Adding RcppArmadillo settings<br>
 >> added Depends: Rcpp, RcppArmadillo<br>
 >> added LinkingTo: Rcpp, RcppArmadillo<br>
 >> added useDynLib directive to NAMESPACE<br>
 >> added Makevars file with Rcpp settings<br>
 >> added Makevars.win file with RcppArmadillo settings<br>
 >> added example header file using Rcpp/RcppArmadillo<br>
 >> added example src file using armadillo classes<br>
 >> added example R file calling the C++ example<br>
Warning message:<br>
In dump(item, file = file.path(code_dir, sprintf("%s.R", list0[item]))) :<br>
  deparse of an S4 object will not be source()able<br>
R><br>
<br>
<br>
indicating the result from cxxfunction() will not be representable. And<br>
indeed:<br>
<br>
edd@max:/tmp$ R CMD INSTALL inlineExample<br>
* installing to library ‘/usr/local/lib/R/site-library’<br>
</div></div><div class="im HOEnZb">* installing *source* package ‘inlineExample’ ...<br>
</div><div class="im HOEnZb">** libs<br>
ccache g++-4.6 -I/usr/share/R/include -DNDEBUG   -I"/usr/local/lib/R/site-library/Rcpp/include" -I"/usr/local/lib/R/site-library/RcppArmadillo/include"   -fpic  -g -O0 -Wall -c rcpparma_hello_world.cpp -o rcpparma_hello_world.o<br>


g++-4.6 -shared -o inlineExample.so rcpparma_hello_world.o -L/usr/local/lib/R/site-library/Rcpp/lib -lRcpp -Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib -llapack -lblas -lgfortran -lm -lquadmath -L/usr/lib/R/lib -lR<br>


installing to /usr/local/lib/R/site-library/inlineExample/libs<br>
** R<br>
Error in parse(outFile) : 3:21: unexpected '<'<br>
2: structure(function (UmatrixR)<br>
3: .Primitive(".Call")(<<br>
                      ^<br>
ERROR: unable to collate and parse R files for package ‘inlineExample’<br>
* removing ‘/usr/local/lib/R/site-library/inlineExample’<br>
edd@max:/tmp$<br>
<br>
That is is simply not supported. You have to subscribe your inline'd object<br>
by hand.<br>
<br>
Second, and as for the manual page leading to an error: we can reproduce that<br>
via<br>
<br>
  package.skeleton(name='pkgskelExample',list=c('plus.two.r'))<br>
<br>
which is free of any Rcpp-isms.  So this appears to be "simply" a bug in R.<br>
<br>
Dirk<br>
<br>
</div><div class="HOEnZb"><div class="h5">--<br>
Dirk Eddelbuettel | <a href="mailto:edd@debian.org">edd@debian.org</a> | <a href="http://dirk.eddelbuettel.com" target="_blank">http://dirk.eddelbuettel.com</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Nathan VanHoudnos<br>|- Statistics & Public Policy PhD student<br>|- Program for Interdisciplinary Education Research (PIER) Fellowship<br>|- Carnegie Mellon University<br>

|- <a href="http://www.andrew.cmu.edu/user/nmv" target="_blank">http://www.andrew.cmu.edu/user/nmv</a><br><br>"We may at once admit that any inference from the particular to the<div> general must be attended with some degree of uncertainty, but this</div>

<div> is not the same as to admit that such inference cannot be absolutely</div><div> rigorous, for the nature and degree of the uncertainty may itself be </div><div> capable of rigorous expression."  -- R.A. Fisher</div>

<br>
</div>