December 10, 2013
By

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

A new Armadillo release 3.930 came out a few days ago, with a very nice set of changes (see below). I rolled this into RcppArmadillo 0.3.930.0. However, one of these changes revealed that R shipped only the standard SVD for complex-valued matrices, and not the more performant divide-and-conquer approach. So in R builds using the default built-in Lapack, at least one CRAN package no longer built.

After some back and forth, Conrad put some branching in the library to fall back to the standard SVD, and I added a built-time configuration test for an appropriate preprocessor directive used by the fallback code. This is now on which is now on CRAN and in Debian as RcppArmadillorelease 0.3.930.1, and Conrad will probably update the Armadillo page as well (though the fix is only needed with R's builtin Rlapack). Also of note is that R Core already added the missing Fortran routine zgesdd to R 3.1.0 (aka "R-devel") so this issue goes away with the next release. Also of note, I wrote up a short Rcpp Gallery post illustrating the performance gains available from divide-and-conquer SVD.

The complete list of changes is below.

#### Changes in RcppArmadillo version 0.3.930.1 (2013-12-09)

• Armadillo falls back to standard complex svd if the more performant divide-and-conquer variant is unavailable

• Added detection for Lapack library and distinguish between R's own version (withhout zgesdd) and system Lapack; a preprocessor define is set accordingly

#### Changes in RcppArmadillo version 0.3.930.0 (2013-12-06)

• added divide-and-conquer variant of svd_econ(), for faster SVD

• added divide-and-conquer variant of pinv(), for faster pseudo-inverse

• added element-wise variants of min() and max()

• added size() based specifications of submatrix view sizes

• added randi() for generating matrices with random integer values

• added more intuitive specification of sort direction in sort() and sort_index()

• added more intuitive specification of method in det(), .i(), inv() and solve()

• added more precise timer for the wall_clock class when using C++11

• New unit tests for complex matrices and vectors

Courtesy of CRANberries, there is also a diffstat report for the most recent release As always, more detailed information is on the RcppArmadillo page. Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page.

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.