RcppExamples
contains a few illustrations of how to use
Rcpp. It grew out
of documentation for the classic API (now in its own package RcppClassic) and
we added more functions documenting how to do the same with the new API we
have been focusing on for the last year or so. One of the things I added in
the last few days was the example below showing how to use
Rcpp::List
with lookups to replace use of the old and deprecated
RcppParams
. It also show how to return values to
R rather easily
#include <Rcpp.h>
RcppExport SEXP newRcppParamsExample(SEXP params) {
try { // or use BEGIN_RCPP macro
Rcpp::List rparam(params); // Get parameters in params.
std::string method = Rcpp::as<std::string>(rparam["method"]);
double tolerance = Rcpp::as<double>(rparam["tolerance"]);
int maxIter = Rcpp::as<int>(rparam["maxIter"]);
Rcpp::Date startDate = Rcpp::Date(Rcpp::as<int>(rparam["startDate"])); // ctor from int
Rprintf("\nIn C++, seeing the following value\n");
Rprintf("Method argument : %s\n", method.c_str());
Rprintf("Tolerance argument : %f\n", tolerance);
Rprintf("MaxIter argument : %d\n", maxIter);
Rprintf("Start date argument: %04d-%02d-%02d\n",
startDate.getYear(), startDate.getMonth(), startDate.getDay());
return Rcpp::List::create(Rcpp::Named("method", method),
Rcpp::Named("tolerance", tolerance),
Rcpp::Named("maxIter", maxIter),
Rcpp::Named("startDate", startDate),
Rcpp::Named("params", params)); // or use rparam
} catch( std::exception &ex ) { // or use END_RCPP macro
forward_exception_to_r( ex );
} catch(...) {
::Rf_error( "c++ exception (unknown reason)" );
}
return R_NilValue; // -Wall
}
The package is work-in-progress and needs way more general usage examples for Rcpp and particularly the new API. But it's a start.
A few more details on the page are on the RcppExamples page.