Armadillo is a powerful and expressive C++ template library for linear algebra and scientific computing. It aims towards a good balance between speed and ease of use, has a syntax deliberately close to Matlab, and is useful for algorithm development directly in C++, or quick conversion of research code into production environments. RcppArmadillo integrates this library with the R environment and language–and is widely used by (currently) 1241 other packages on CRAN, downloaded 40.4 million times (per the partial logs from the cloud mirrors of CRAN), and the CSDA paper (preprint / vignette) by Conrad and myself has been cited 634 times according to Google Scholar.
Conrad released a minor version 4.6.0 yesterday which offers new accessors for non-finite values. And despite being in Beautiful British Columbia on vacation, I had wrapped up two rounds of reverse dependency checks preparing his 4.6.0 release, and shipped this to CRAN this morning where it passed with flying colours and no human intervention—even with over 1200 reverse dependencies. The changes since the last CRAN release are summarised below.
Changes in RcppArmadillo version 14.6.0-1 (2025-07-02)
Upgraded to Armadillo release 14.6.0 (Caffe Mocha)
Added
balance()
to transform matrices so that column and row norms are roughly the sameAdded
omit_nan()
andomit_nonfinite()
to extract elements while omitting NaN and non-finite valuesAdded
find_nonnan()
for finding indices of non-NaN elementsAdded standalone
replace()
functionThe
fastLm()
help page now mentions that options tosolve()
can control its behavior.
Courtesy of my CRANberries, there is a diffstat report relative to previous release. More detailed information is on the RcppArmadillo page. Questions, comments etc should go to the rcpp-devel mailing list off the Rcpp R-Forge page.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub.
With a friendly Canadian hand wave from vacation in Beautiful British Columbia, and speaking on behalf of the Rcpp Core Team, I am excited to shared that the (regularly scheduled bi-annual) update to Rcpp just brought version 1.1.0 to CRAN. Debian builds haven been prepared and uploaded, Windows and macOS builds should appear at CRAN in the next few days, as will builds in different Linux distribution–and of course r2u should catch up tomorrow as well.
The key highlight of this release is the switch to C++11 as minimum standard. R itself did so in release 4.0.0 more than half a decade ago; if someone is really tied to an older version of R and an equally old compiler then using an older Rcpp with it has to be acceptable. Our own tests (using continuous integration at GitHub) still go back all the way to R 3.5.* and work fine (with a new-enough compiler). In the previous release post, we commented that we had only reverse dependency (falsely) come up in the tests by CRAN, this time there was none among the well over 3000 packages using Rcpp at CRAN. Which really is quite amazing, and possibly also a testament to our rigorous continued testing of our development and snapshot releases on the key branch.
This release continues with the six-months January-July cycle started with release 1.0.5 in July 2020. As just mentioned, we do of course make interim snapshot ‘dev’ or ‘rc’ releases available. While we not longer regularly update the Rcpp drat repo, the r-universe page and repo now really fill this role admirably (and with many more builds besides just source). We continue to strongly encourage their use and testing—I run my systems with these versions which tend to work just as well, and are of course also fully tested against all reverse-dependencies.
Rcpp has long established itself as the most popular way of enhancing R with C or C++ code. Right now, 3038 packages on CRAN depend on Rcpp for making analytical code go faster and further. On CRAN, 13.6% of all packages depend (directly) on Rcpp, and 61.3% of all compiled packages do. From the cloud mirror of CRAN (which is but a subset of all CRAN downloads), Rcpp has been downloaded 100.8 million times. The two published papers (also included in the package as preprint vignettes) have, respectively, 2023 (JSS, 2011) and 380 (TAS, 2018) citations, while the the book (Springer useR!, 2013) has another 695.
As mentioned, this release switches to C++11 as the minimum standard.
The diffstat
display in the CRANberries
comparison to the previous release shows how several (generated)
sources files with C++98 boilerplate have now been removed; we also
flattened a number of if
/else
sections we no
longer need to cater to older compilers (see below for details). We also
managed more accommodation for the demands of tighter use of the C API
of R by removing DATAPTR
and CLOENV
use. A
number of other changes are detailed below.
The full list below details all changes, their respective PRs and, if applicable, issue tickets. Big thanks from all of us to all contributors!
Changes in Rcpp release version 1.1.0 (2025-07-01)
Changes in Rcpp API:
C++11 is now the required minimal C++ standard
The
std::string_view
type is now covered bywrap()
(Lev Kandel in #1356 as discussed in #1357)A last remaining
DATAPTR
use has been converted toDATAPTR_RO
(Dirk in #1359)Under R 4.5.0 or later,
R_ClosureEnv
is used instead ofCLOENV
(Dirk in #1361 fixing #1360)Use of
lsInternal
switched tolsInternal3
(Dirk in #1362)Removed compiler detection macro in a header cleanup setting C++11 as the minunum (Dirk in #1364 closing #1363)
Variadic templates are now used onconditionally given C++11 (Dirk in #1367 closing #1366)
Remove
RCPP_USING_CXX11
as a#define
as C++11 is now a given (Dirk in #1369)Additional cleanup for
__cplusplus
checks (Iñaki in #1371 fixing #1370)Unordered set construction no longer needs a macro for the pre-C++11 case (Iñaki in #1372)
Lambdas are supported in a Rcpp Sugar functions (Iñaki in #1373)
The Date(time)Vector classes now have default ctor (Dirk in #1385 closing #1384)
Fixed an issue where Rcpp::Language would duplicate its arguments (Kevin in #1388, fixing #1386)
Changes in Rcpp Attributes:
Changes in Rcpp Documentation:
Changes in Rcpp Deployment:
Thanks to my CRANberries, you can also look at a diff to the previous release Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page. Bugs reports are welcome at the GitHub issue tracker as well (where one can also search among open or closed issues).
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub.