Using Sugar Mathmatical Operators

Ross Bennett — written Dec 21, 2012 — source

The mathematical operators (+, -, *, /) work just like they do in R thanks to a little magic with Rcpp sugar. Here are some simple examples of their usage:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
void applyOperators(NumericVector x, NumericVector y) {
   
   // add a vector and a scalar
   NumericVector result = x + 5.0;
   
   // add 2 vectors of the same length
   result = x + y;
   
   // subtract a vector and a scalar
   result = 5.0 - x;
   
   // subtract 2 vectors of the same length
   result = x - y;
   
   // multiply a vector and a scalar
   result = 3.5 * x;
   
   // multiple 2 vectors of the same length
   result = x * y;
   
   // divide a vector and a scalar
   result = x / 8.0;
   
   // divide 2 vectors of the same length
   result = x / y;  
}

The above examples are rather simple, but it’s also possible to combine operators into more complex expressions. For example:

// [[Rcpp::export]]
NumericVector computeResult(NumericVector x, NumericVector y) {
   return x + 5.0 * 2.0 - 1.0 / y;
}
computeResult(c(1,2,3), c(4,5,6))
[1] 10.75 11.80 12.83

tags: sugar 

Related Articles