[Rcpp-commits] r1126 - in pkg/Rcpp/inst: . announce
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Wed Apr 28 10:56:58 CEST 2010
Author: romain
Date: 2010-04-28 10:56:58 +0200 (Wed, 28 Apr 2010)
New Revision: 1126
Added:
pkg/Rcpp/inst/announce/
pkg/Rcpp/inst/announce/ANNOUNCE-0.7.0.txt
Log:
added announce dir and ANNOUNCE-0.7.0.txt
Added: pkg/Rcpp/inst/announce/ANNOUNCE-0.7.0.txt
===================================================================
--- pkg/Rcpp/inst/announce/ANNOUNCE-0.7.0.txt (rev 0)
+++ pkg/Rcpp/inst/announce/ANNOUNCE-0.7.0.txt 2010-04-28 08:56:58 UTC (rev 1126)
@@ -0,0 +1,74 @@
+cpp version 0.7.0 went onto CRAN this weekend. The key new features are
+
+ o inline support, taken from Oleg Sklyar's neat inline package and
+ adapted/extented to support Rcpp as well as external libraries
+ (see below for an example); this even works on Windows (provided you
+ have Rtools installed and configured);
+
+ o addition of a new simple type RcppSexp for importing or exporting
+ simple types directly between R and C++
+
+ o addition of a number of new examples for both these features
+
+ o code reorganisation: every class has in its own header and source file
+
+ o last but not least relicensed from LGPL (>=2.1) to GPL (>= 2)
+
+My blog (http://dirk.eddelbuettel.com/blog/) has two recent posts with a bit
+more details (and colour highlighting of the code below) but let's just look
+at one example of using GNU GSL functions for illustrative purposes (as you
+wouldn't need this to access random-number generators as R has its own).
+
+Consider this R code snippet:
+
+ ## use Rcpp to pass down a parameter for the seed, and a vector size
+ gslrng <- '
+ int seed = RcppSexp(s).asInt();
+ int len = RcppSexp(n).asInt();
+
+ gsl_rng *r;
+ gsl_rng_env_setup();
+ std::vector<double> v(len);
+
+ r = gsl_rng_alloc (gsl_rng_default);
+
+ gsl_rng_set (r, (unsigned long) seed);
+ for (int i=0; i<len; i++) {
+ v[i] = gsl_rng_get (r);
+ }
+ gsl_rng_free(r);
+
+ return RcppSexp(v).asSexp();
+ '
+
+ ## turn into a function that R can call
+ ## compileargs redundant on Debian/Ubuntu as gsl headers are found anyway
+ funx <- cfunction(signature(s="numeric", n="numeric"),
+ gslrng,
+ includes="#include <gsl/gsl_rng.h>",
+ Rcpp=TRUE,
+ cppargs="-I/usr/include",
+ libargs="-lgsl -lgslcblas")
+ print(funx(0, 5))
+
+
+Brief notes on this:
+
+ 1) The character variable gslrng contains valid C++ code.
+
+ 2) The call to cfunction converts this C++ code into a function that
+ calls it -- and this function is compiled, linked and loaded
+ automagically simply using hints about GSL header files and libraries.
+
+ 3) The interface is explit: cfunction() is told about a function signature
+ with numeric variables 's' and 'n'; this is what the C++ code convert
+ to (C++ local) variables 'seed' and 'len' using the RcppSexp class.
+
+ 4) We return a single SEXP to R which is based on the std::vector<double>
+ v which is also converted on the fly.
+
+ 5) The resulting vector is returned and simply printed at the R level.
+
+
+More examples are in the source tarball and in the R-Forge SVN archive.
+
More information about the Rcpp-commits
mailing list