c++rrinside

error in abline when run via RInside


I'm running into a problem using RInside vs the console. This is all run on ubuntu 14.04 using R 3.2.4 installed via apt-get from CRAN. Here is the c++ and R code:

#include <RInside.h>                            // for the embedded R via RInside

int main(int argc, char *argv[]) {

    RInside R(argc, argv);                      // create an embedded R instance
    R.parseEval("source('abline.R')");
}

abline.R

bp <- data.frame(
  age = c(28, 23, 52, 42, 27, 29, 43, 34, 40, 28),
  systolic = c(70, 68, 90, 75, 68, 80, 78, 70, 80, 72))
str(bp)
attach(bp)

bp.lm <- lm(systolic ~ age)

plot(age, systolic)
abline(bp.lm)
lines(lowess(age, systolic, f=0.75), lty=2)

The R code works fine from the console, but errors when the program is run.

mlilback@rc2x:/tmp/abtest$ ./abtest 
'data.frame':   10 obs. of  2 variables:
 $ age     : num  28 23 52 42 27 29 43 34 40 28
 $ systolic: num  70 68 90 75 68 80 78 70 80 72
Error in if (noInt) { : argument is of length zero
terminate called after throwing an instance of 'std::runtime_error'
  what():  Error evaluating: source('abline.R')
Aborted (core dumped)

The if (noInt) { is from the source of abline (line 18 in my version of R). I'm completely stumped as to why this only happens via RInside.

Any ideas?


Solution

  • Works for me without any issues. Ubuntu 16.04. Running out of the examples directory to get the GNUmakefile-based build for free:

    ~/git/rinside/inst/examples/standard(master)$ vi soquestion.cpp
    ~/git/rinside/inst/examples/standard(master)$ make soquestion
    ccache g++ -I/usr/share/R/include -I/usr/local/lib/R/site-library/Rcpp/include \
         -I/usr/local/lib/R/site-library/RInside/include -g -O3 -Wall -pipe \
         -Wno-unused -Wall    soquestion.cpp  -Wl,--export-dynamic -fopenmp \
         -L/usr/lib/R/lib -lR -lpcre -llzma -lbz2 -lz -lrt -ldl -lm  -lblas -llapack  \
         -L/usr/local/lib/R/site-library/RInside/lib -lRInside \
         -Wl,-rpath,/usr/local/lib/R/site-library/RInside/lib -o soquestion
    ~/git/rinside/inst/examples/standard(master)$ vi abline.R
    ~/git/rinside/inst/examples/standard(master)$ ./soquestion 
    'data.frame':   10 obs. of  2 variables:
     $ age     : num  28 23 52 42 27 29 43 34 40 28
     $ systolic: num  70 68 90 75 68 80 78 70 80 72
    ~/git/rinside/inst/examples/standard(master)$ 
    

    I literally just copied an pasted your two files. Also:

    ~/git/rinside/inst/examples/standard(master)$ ls -1tr | tail -4
    soquestion.cpp
    soquestion
    abline.R
    Rplots.pdf
    ~/git/rinside/inst/examples/standard(master)$ 
    

    You probably want to open a device file via pdf() or png() ...