#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include #include #include #include #include #include #include #include #include typedef struct VECTOR_SEXPREC RVec; extern uintptr_t R_CStackLimit; extern int R_Signalhandlers; //End R session IV end_R() { Rf_endEmbeddedR(0); return EXIT_SUCCESS; } //Eval R command RVec * eval_R(char * cmd) { SEXP cmdSexp, cmdExpr, ans = R_NilValue; ParseStatus status; int i; PROTECT(cmdSexp = allocVector(STRSXP, 1)); SET_STRING_ELT(cmdSexp, 0, mkChar(cmd)); cmdExpr = PROTECT(R_ParseVector(cmdSexp, -1, &status, R_NilValue)); if (status != PARSE_OK) { UNPROTECT(2); error("invalie cmd %s", cmd); } for(i=0; i