Rcpp 0.10.5

September 29, 2013
By

(This article was first published on Thinking inside the box , and kindly contributed to R-bloggers)

A new version of Rcpp is now
on the CRAN network for
GNU R;
binaries for Debian have been uploaded
as well.

Once more, this release brings a large number of exciting changes to
Rcpp. Some concern
usability, some bring new features, some increase performance; see
below for the detailed list. We have now released three updates on a
quarterly cycle; if we keep this up the next version ought to be ready at the
end of December.

As in the past, we tested the release rather rigorously by checking against all
packages I could (relatively easily) built on my server: this time it
successfully passed \code{R CMD check} for all 107 packages I can build
locally out of a total of 136 packages. (Two failed: one for an error in
\code{Makevars}, and one for the need of an X11 server during tests; this may
get addressed in the in test script next time). As all of these 107 packages
passed, we do not expect any issues with dependent packages. Should
there be issues we would appreciate a note, preferably with reproducible
code, to the
rcpp-devel
mailing list
.

The complete NEWS
entry for 0.10.4 is below; more details are in the ChangeLog file in the package and on the
Rcpp Changelog page.

Changes in Rcpp version 0.10.5 (2013-09-28)

  • Changes in R code:

    • New R function demangle that calls the DEMANGLE macro.

    • New R function sizeof to query the byte size of a
      type. This returns an object of S3 class bytes that has a print method showing bytes and bits.

  • Changes in Rcpp API:

    • Add defined(__sun) to lists of operating systems to test for when checking for lack of backtrace() needed for stack traces.

    • as<T*>, as<const T*>, as<T&>
      and as<const T&> are now supported, when T is a class exposed by modules, i.e. with RCPP_EXPOSED_CLASS

    • DoubleVector as been added as an alias to NumericVector

    • New template function is<T> to identify if an R object
      can be seen as a T. For example is<DataFrame>(x).
      This is a building block for more expressive dispatch in various places
      (modules and attributes functions).

    • wrap can now handle more types, i.e. types that iterate over
      std::pair<const KEY, VALUE> where KEY can be converted to a
      String and VALUE is either a primitive type (int, double)
      or a type that wraps. Examples :

      • std::map<int, double> : we can make a String from an int, and double is primitive

      • boost::unordered_map<double, std::vector<double> >: we can make
        a String from a double and std::vector<double> can wrap itself

      Other examples of this are included at the end of the wrap unit test
      file (runit.wrap.R and wrap.cpp).

    • wrap now handles containers of classes handled by modules. e.g. if you expose a class Foo via modules, then you can wrap
      vector<Foo>, … An example is included in the wrap unit test file.

    • RcppLdFlags(), often used in Makevars files of
      packages using Rcpp, is now exported from the package namespace.

  • Changes in Attributes:

    • Objects exported by a module (i.e. by a RCPP_MODULE call
      in a file that is processed by sourceCpp) are now directly
      available in the environment. We used to make the module object
      available, which was less useful.

    • A plugin for openmp has been added to support use of OpenMP.

    • Rcpp::export now takes advantage of the more flexible
      as<>, handling constness and referenceness of the input types.
      For users, it means that for the parameters of function exported by modules,
      we can now use references, pointers and const versions of them.
      The file Module.cpp file has an example.

    • No longer call non-exported functions from the tools package

    • No longer search the inline package as a fallback when loading plugins for the the Rcpp::plugins attribute.

  • Changes in Modules:

    • We can now expose functions and methods that take
      T& or const T& as arguments. In these situations
      objects are no longer copied as they used to be.

  • Changes in sugar:

    • is_na supports classes DatetimeVector and DateVector

  • Changes in Rcpp documentation:

    • The vignettes have been moved from inst/doc/ to the vignettes directory which is now preferred.

    • The appearance of the vignettes has been refreshed by switching to the Bistream Charter font, and microtype package.

  • Deprecation of RCPP_FUNCTION_*:

    • The macros from the preprocessor_generated.h file
      have been deprecated. They are still available, but they print a message in addition to their expected behavior.

    • The macros will be permanently removed in the first Rcpp release after July 2014.

    • Users of these macros should start replacing them with more up-to-date code, such as using ‘Rcpp attributes’ or ‘Rcpp modules’.

Thanks to
CRANberries, you can also look at a
diff to the previous release 0.10.4.
As always, even fuller details are on the
Rcpp Changelog page and the
Rcpp page which also
leads to the downloads, the
browseable doxygen docs
and zip files of doxygen output for the standard formats.
A local directory has source and documentation too.
Questions, comments etc should go to the
rcpp-devel mailing list
off the R-Forge page

To leave a comment for the author, please follow the link and comment on his blog: Thinking inside the box .

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.