Tuesday, September 09, 2014

Ceemple vs. Rcpp

Ceemple is a cool way to do C++. Rcpp is another cool way to do C++. Each of them has its own strengths and weaknesses. I am amazed to see how little change is required to get the same source to compile and run under these environments. For example, Ceemple comes with an example that uses the Eigen matrix library:

--------------------------------------------
#include <Eigen/Dense>
#include <iostream>
using namespace Eigen;
using namespace std;

int main()
{
  ArrayXXf  m(2,2);
  // assign some values coefficient by coefficient
  m(0,0) = 1.0; m(0,1) = 2.0;
  m(1,0) = 3.0; m(1,1) = m(0,1) + m(1,0);
  // print values to standard output
  cout << m << endl << endl;
  // using the comma-initializer is also allowed
  m << 1.0,2.0,
       3.0,4.0;
  // print values to standard output
  cout << m << endl;
}
-------------------------------------------

With Rcpp (using the Rstudio IDE), this becomes:
-------------------------------------------
// [[Rcpp::depends(RcppEigen)]]
#include <RcppEigen.h>
using namespace std;
using namespace Rcpp;
using namespace Eigen;

// [[Rcpp::export]]
int test_eigen()
{
  ArrayXXf  m(2,2);
  // assign some values coefficient by coefficient
  m(0,0) = 1.0; m(0,1) = 2.0;
  m(1,0) = 3.0; m(1,1) = m(0,1) + m(1,0);
  // print values to standard output
  cout << m << endl << endl;
  // using the comma-initializer is also allowed
  m << 1.0,2.0,
       3.0,4.0;
  // print values to standard output
  cout << m << endl;
  return 0;
}

/*** R
test_eigen()
*/
-------------------------------------------

Virtually no changes required! 

No comments:

Counter