Using R in C++

Table of Contents

Preface

The RInside package provides seamless integration in c++ code.

Example code

// main.cpp

#include <iostream>

#include <Rcpp.h>
#include <RInside.h>

int main(int argc, char *argv[]) {
    using namespace std;
    cout << "Hello, CPP World!\n";

    RInside R(argc, argv);
    Rcpp::CharacterVector a("Hello, R World!\n");
    print(a);

    exit(0);
}

RInside

I’m using Microsoft R Open, so I’ll provide instructions for it, but it could be easily extended to any version of R. Just insert your version or your path to R.

What do we need

Compilation with GCC

# Buildtime libs
export LIBRARY_PATH="/opt/microsoft/ropen/3.5.3/lib64/R/library/RInside/lib:$LD_LIBRARY_PATH"
export LIBRARY_PATH="/opt/microsoft/ropen/3.5.3/lib64/R/lib:$LD_LIBRARY_PATH"

# Include dirs
export CPLUS_INCLUDE_PATH="/opt/microsoft/ropen/3.5.3/lib64/R/library/RInside/include:$CPLUS_INCLUDE_PATH"
export CPLUS_INCLUDE_PATH="/opt/microsoft/ropen/3.5.3/lib64/R/library/Rcpp/include:$CPLUS_INCLUDE_PATH"
export CPLUS_INCLUDE_PATH="/opt/microsoft/ropen/3.5.3/lib64/R/include:$CPLUS_INCLUDE_PATH"

# R dependencies
Rscript -e 'install.packages("Rcpp", "RInside")'

g++ -lR -lRInside -o main.bin main.cpp

Output

# Runtime libs
export LD_LIBRARY_PATH="/opt/microsoft/ropen/3.5.3/lib64/R/library/RInside/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="/opt/microsoft/ropen/3.5.3/lib64/R/library/Rcpp/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="/opt/microsoft/ropen/3.5.3/lib64/R/lib:$LD_LIBRARY_PATH"

bash_prompt$ ./main.bin
Hello, CPP World!
[1] "Hello, R World!\n"

Code samples

RInside Example

×