Hello Dirk, For my specific purpose I have some reservations about package creation. Here is a description of the project I have in mind.
I would like to use Rcpp to create a set of generic MCMC algorithms, into which a useR could easily hook their own target distributions written in C++ with minimal effort. For example, I would provide the following files: -------------------------------------- GibbsSampler.cpp //[[Rcpp::export]] NumericMatrix GibbsSampler(int nIter, NumericVector xInit, List tuningParams) { // run some flavor of the Gibbs sampler } --------------------------------------- GibbsSampler.h double logDensity(NumericVector x); --------------------------------------- Then the useR would write MyDensityA.cpp, which contains the definition of logDensity, compile the three files, and have a Gibbs sampler for their specific density function written in C++ and ready to go in R. However, a useR might wish to use the GibbsSampler for a different density tomorrow. They would have a different definition of logDensity in MyDensityB.cpp. Ideally, the useR would have access to Gibbs samplers for both densities in the same R session. I can think of two ways of doing this with Rcpp: 1. Compile with sourceCpp (this is what I'm currently doing). There's the minor issue of giving separate R names to each Gibbs sampler, but there are many ways around that. The major issue is that sourceCpp only accepts a single .cpp file (or at least as far as my attempts were unsuccessful in the original post). So I'm stuck text-processing a bunch of .cpp and .h files together (the actual project I'm working on has about a dozen of each). 2. Compile an entire R package for each of MyDensityA and MyDensityB. However, it seems somewhat cumbersome to have a package loaded for every density function in the workspace. Moreover, naming conflicts are a bit more tricky. Right now (with sourceCpp), I'm using an interface of the form smpA <- gibbs.sampler(density = MyDensityA, niter = 1e4) smpB <- gibbs.sampler(density = MyDensityB, niter = 1e4) This is to align with things like lm(formula = MyModel). However, I can't quite see how to do this with separate packages loaded. Rather it seems I'd need something like smpA <- gibbs.sampler.MyDensityA(niter = 1e4) smpB <- gibbs.sampler.MyDensityB(niter = 1e4) However, to do this with packages I feel like I would still have to do some text replacement, which I'm already doing with the sourceCpp approach. In summary, I am not opposed to package creation, but I hope you can see my reservations at taking this route. Perhaps you could please suggest a way to achieve what I'm after with separate Rcpp packages for each density function. I take it from your reluctance to answer my original post that Rcpp only supports compilation of multiple files through the package creation protocol. I can think of many applications in which the useR could supply a minimal amount of C++ code (e.g., a log-likelihood function) to hook in with a large amount of code provided by the developer in order to speed things up considerably. So in my opinion it would be worthwhile to devise a mechanism to do this correctly. Best regards, Martin Lysy Assistant Professor of Statistics Department of Statistics and Actuarial Science University of Waterloo On Wed, Apr 13, 2016 at 5:34 PM, Dirk Eddelbuettel <e...@debian.org> wrote: > > Martin, > > Please please please look into creating a package. > > If you use RStudio: File -> New Project -> (New or Existing) Directory -> > Package and then select Rcpp. > > If not, consider install the (very tiny) pkgKitten package and call > Rcpp.package.skeleton() from Rcpp itself (but enhanced by pkgKitten if > present) for a saner package. > > Cheers, Dirk > > -- > http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org >
_______________________________________________ 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