コード例 #1
0
ファイル: omxState.cpp プロジェクト: cran/OpenMx
void omxGlobal::reportProgressStr(const char *msg)
{
	ProtectedSEXP theCall(Rf_allocVector(LANGSXP, 3));
	SETCAR(theCall, Rf_install("imxReportProgress"));
	ProtectedSEXP Rmsg(Rf_allocVector(STRSXP, 1));
	SET_STRING_ELT(Rmsg, 0, Rf_mkChar(msg));
	SETCADR(theCall, Rmsg);
	SETCADDR(theCall, Rf_ScalarInteger(previousReportLength));
	Rf_eval(theCall, R_GlobalEnv);
}
コード例 #2
0
ファイル: rlibjson.c プロジェクト: wyngit/RJSONIO
R_stream_callback(JSONNODE *node) 
#endif
{
#ifdef NEW_JSON_NEW_STREAM
    SEXP expr = (SEXP) data;
#endif
    SEXP ref;
    ref = CAR(CDR(expr));
    R_SetExternalPtrAddr(ref, node);
    Rf_eval(expr, R_GlobalEnv);
}
コード例 #3
0
ファイル: barrier.cpp プロジェクト: baptiste/Rcpp
// only used for debugging
SEXP get_rcpp_cache() {
    if( ! Rcpp_cache_know ){
        
        SEXP getNamespaceSym = Rf_install("getNamespace"); // cannot be gc()'ed  once in symbol table
        Rcpp::Shield<SEXP> RCPP( Rf_eval(Rf_lang2( getNamespaceSym, Rf_mkString("Rcpp") ), R_GlobalEnv) ) ;
        
        Rcpp_cache = Rf_findVarInFrame( RCPP, Rf_install(".rcpp_cache") ) ;
        Rcpp_cache_know = true ;
    }
    return Rcpp_cache ;
}
コード例 #4
0
ファイル: RJSON.c プロジェクト: cran/RJSONIO
void
R_json_parse_connection(SEXP r_input, SEXP numLines, struct JSON_parser_struct *parser)
{
    const char *input;
    unsigned int count = 0, len, totalCount = 0, lineCount = 0;
    SEXP call, ans;
    int n, i, maxNumLines;

    PROTECT(call = allocVector(LANGSXP, 3));
    SETCAR(call, Rf_install("readLines"));
    SETCAR(CDR(call), r_input);
    SETCAR(CDR(CDR(call)), ScalarInteger(1));

    maxNumLines = INTEGER(numLines)[0];

    while(1) {

      PROTECT(ans =  Rf_eval(call, R_GlobalEnv));
      n = Rf_length(ans);
      lineCount += n;

      if(n == 0) {
	  UNPROTECT(1);
	  break;
      }

      for(i = 0 ; i < n ; i++) {
	input = CHAR(STRING_ELT(ans, i));
	len = strlen(input);
	for (count = 0; count < len ; ++count, ++totalCount) {
	    int next_char = input[count];
	    if (next_char <= 0) {
		break;
	    }
	    if (!JSON_parser_char(parser, next_char)) {
		delete_JSON_parser(parser);
		PROBLEM "JSON parser error: syntax error, byte %d (%c)", totalCount, input[count]
		    ERROR;
	    }
	}
      }
      UNPROTECT(1);

      if(maxNumLines > 0 && lineCount == maxNumLines)
	  break;
    }

    UNPROTECT(1);
    if (!JSON_parser_done(parser)) {
	delete_JSON_parser(parser);
	PROBLEM "JSON parser error: syntax error, incomplete content" 
	    ERROR;
    }
}
コード例 #5
0
ファイル: converters.c プロジェクト: omegahat/Rffi
int
R_is(SEXP val, const char * const klass)
{
    SEXP expr, ans;
    PROTECT(expr = allocVector(LANGSXP, 3));
    SETCAR(expr, Rf_install("is"));
    SETCAR(CDR(expr), val);
    SETCAR(CDR(CDR(expr)), ScalarString(mkChar(klass)));
    ans = Rf_eval(expr, R_GlobalEnv);
    UNPROTECT(1);
    return(LOGICAL(ans)[0]);
}
コード例 #6
0
ファイル: IRBuilder.cpp プロジェクト: doktorschiwago/Rllvm2
void
raiseError(llvm::SMDiagnostic err)
{
    SEXP e, cur;
    PROTECT(e = allocVector(LANGSXP, 4));
    SETCAR(e, Rf_install("parseIRError")); cur = CDR(e);
    SETCAR(cur, ScalarInteger(err.getLineNo())); cur = CDR(cur);
    SETCAR(cur, ScalarInteger(err.getColumnNo())); cur = CDR(cur);
    SETCAR(cur, ScalarString(mkChar(err.getMessage().data())));
    Rf_eval(e, R_GlobalEnv);
    UNPROTECT(1);
}
コード例 #7
0
ファイル: schema.c プロジェクト: SvenDowideit/clearlinux
void
R_schemaValidityFunctionCall(R_SchemaValidCallback *ctx, int warning, const char *msg, va_list args)
{
    SEXP arg;
    char buf[10000];
    vsnprintf(buf, sizeof(buf)/sizeof(buf[0]), msg, args);
    PROTECT(arg = mkString(buf));
    SET_CLASS(arg, mkString(warning ? "XMLSchemaWarning" : "XMLSchemaError"));
    SETCAR(CDR(ctx->fun), arg);
    Rf_eval(ctx->fun, R_GlobalEnv);
    UNPROTECT(1);
}
コード例 #8
0
static const char*
EmbeddedR_string_from_errmessage(void)
{
  SEXP expr, res;
  /* PROTECT(errMessage_SEXP) */
  PROTECT(expr = allocVector(LANGSXP, 1));
  SETCAR(expr, errMessage_SEXP);
  PROTECT(res = Rf_eval(expr, R_GlobalEnv));
  const char *message = CHARACTER_VALUE(res);
  UNPROTECT(2);
  return message;
}
コード例 #9
0
ファイル: barrier.cpp プロジェクト: rforge/rcpp
// only used for debugging
SEXP get_rcpp_cache() {
    if( ! Rcpp_cache_know ){
        
        SEXP getNamespaceSym = Rf_install("getNamespace"); // cannot be gc()'ed  once in symbol table
        SEXP RCPP = PROTECT( Rf_eval(Rf_lang2( getNamespaceSym, Rf_mkString("Rcpp") ), R_GlobalEnv) ) ;
        
        Rcpp_cache = Rf_findVarInFrame( RCPP, Rf_install(".rcpp_cache") ) ;
        Rcpp_cache_know = true ;
        Rcpp_protection_stack = VECTOR_ELT(Rcpp_cache, RCPP_PROTECTION_STACK_INDEX) ;
        UNPROTECT(1) ;
    }
    return Rcpp_cache ;
}
コード例 #10
0
ファイル: test.c プロジェクト: yutannihilation/Rffi
double
R_myFun(double val, void *data)
{
    SEXP call, ans;
    PROTECT( call = allocVector(LANGSXP, 2));
    SETCAR(call, (SEXP) data);
    SETCAR(CDR(call), ScalarReal(val));

    ans = Rf_eval(call, R_GlobalEnv);

    UNPROTECT(1);
    return(asReal(ans));
}
コード例 #11
0
ファイル: emd-r.c プロジェクト: s-u/emdist
static float eval_dist(feature_t *f1, feature_t *f2) {
    double *x = REAL(cf1), *y = REAL(cf2);
    int i;
    for (i = 0; i < FDIM; i++) {
	x[i] = f1->loc[i];
	y[i] = f2->loc[i];
    }
    SEXP res = Rf_eval(Rf_lang3(dist_clos, cf1, cf2), R_GlobalEnv);
    if (TYPEOF(res) == INTSXP && LENGTH(res) == 1)
	return (float) (INTEGER(res)[0]);
    if (TYPEOF(res) != REALSXP || LENGTH(res) != 1)
	Rf_error("invalid distance result - must be a numeric vector of length one");
    return (float)(REAL(res)[0]);
}
コード例 #12
0
ファイル: RConverters.c プロジェクト: duncantl/RCUDA
int
R_isVariableReference(SEXP arg)
{
    SEXP e, ans;
    int val;
    
    PROTECT(e = allocVector(LANGSXP, 3));
    SETCAR(e, Rf_install("is"));
    SETCAR(CDR(e), arg);
    SETCAR(CDR(CDR(e)), mkString("VariableReference"));
    ans = Rf_eval(e, R_GlobalEnv);
    val = INTEGER(ans)[0];
    UNPROTECT(1);
    return(val);
}
コード例 #13
0
ファイル: barrier.cpp プロジェクト: baptiste/Rcpp
SEXP init_Rcpp_cache(){   
    SEXP getNamespaceSym = Rf_install("getNamespace"); // cannot be gc()'ed  once in symbol table
    Rcpp::Shield<SEXP> RCPP( Rf_eval(Rf_lang2( getNamespaceSym, Rf_mkString("Rcpp") ), R_GlobalEnv) ) ;
    Rcpp::Shield<SEXP> cache( Rf_allocVector( VECSXP, RCPP_CACHE_SIZE ) );
    
    // the Rcpp namespace
	SET_VECTOR_ELT( cache, 0, RCPP ) ;
	set_error_occured( cache, Rf_ScalarLogical(FALSE) ) ; // error occured
	set_current_error( cache, R_NilValue ) ; // current error
	SET_VECTOR_ELT( cache, 3, R_NilValue ) ; // stack trace
	SET_VECTOR_ELT( cache, RCPP_HASH_CACHE_INDEX, Rf_allocVector(INTSXP, RCPP_HASH_CACHE_INITIAL_SIZE) ) ;
	Rf_defineVar( Rf_install(".rcpp_cache"), cache, RCPP );
    
	return cache ;
}
コード例 #14
0
ファイル: doop.c プロジェクト: omegahat/RGCCTranslationUnit
int
R_do_op1_proxy_callback ( int r1, int r2, void * r3 )
{
	SEXP e, p, r_ans;
	int ans ;
	  PROTECT(p = e = allocVector(LANGSXP, 3 ));
	  SETCAR(p, (SEXP) r3 ); p = CDR(p);
	
	SETCAR(p, ScalarInteger ( r1 ) ); p = CDR(p);
	SETCAR(p, ScalarInteger ( r2 ) ); p = CDR(p);
	
	PROTECT(r_ans = Rf_eval(e, R_GlobalEnv));
	ans = asInteger( r_ans ) ;
	UNPROTECT(2);
	return (ans) ;
} 
コード例 #15
0
ファイル: credis.c プロジェクト: nandakishorkoka/rediscc
/* this is a work-around our compatibility layer for rredis -
   it tries to detect values that are serialized and unserializes them.
   It also converts RAWs to strings, assuming UTF8 */
SEXP raw_unpack(SEXP sWhat) {
    SEXP r;
    if (TYPEOF(sWhat) == RAWSXP && LENGTH(sWhat) >= 10) {
	unsigned char *a = (unsigned char*) RAW(sWhat);
	/* we check for "X\n\0\0" since the foramt is "X\n" <bigendian int version = 2> */
	if (a[0] == 'X' && a[1] == '\n' && !a[2] && !a[3])
	    return Rf_eval(Rf_lang2(Rf_install("unserialize"), sWhat), R_BaseEnv);
    }
    if (TYPEOF(sWhat) == RAWSXP) { /* we do encode strings as RAW so let's reverse that */
	r = PROTECT(Rf_allocVector(STRSXP, 1));
	SET_STRING_ELT(r, 0, Rf_mkCharLenCE((const char*)RAW(sWhat), LENGTH(sWhat), CE_UTF8));
	UNPROTECT(1);
	return r;
    }
    /* everything else is pass-through */
    return sWhat;
}
コード例 #16
0
ファイル: COMError.cpp プロジェクト: dctb13/excel.link
void
COMError(HRESULT hr)
{
    TCHAR buf[512];
    GetScodeString(hr, buf, sizeof(buf)/sizeof(buf[0]));
    /*
    PROBLEM buf
    ERROR;
    */
    SEXP e;
    PROTECT(e = allocVector(LANGSXP, 3));
    SETCAR(e, Rf_install("COMStop"));
    SETCAR(CDR(e), mkString(buf));
    SETCAR(CDR(CDR(e)), ScalarInteger(hr));
    Rf_eval(e, R_GlobalEnv);
    UNPROTECT(1); /* Won't come back to here. */
}
コード例 #17
0
ファイル: RwxEvents.cpp プロジェクト: omegahat/RwxWidgets
SEXP
/*
 Create an R object which is a reference to this object
 (make certain there is no finalizer)
 and get the class information
*/
createDynamicRwxReference(wxEvent *ev, const char *tagName)
{
   SEXP ref, ans, e;

   PROTECT(e = allocVector(LANGSXP, 2));
   SETCAR(e, Rf_install("wxObject"));
   SETCAR(CDR(e), ref = R_MakeExternalPtr((void *) ev, Rf_install(tagName), R_NilValue));      
   ans = Rf_eval(e, R_GlobalEnv);
   UNPROTECT(1);

   return(ans);
}
コード例 #18
0
ファイル: marshal.cpp プロジェクト: johndharrison/RXQuery
/* Map an zorba::Item to a POSIXt object within an optional format. */
SEXP
convertItemToPOSIXct(zorba::Item value, const char *fmt)
{
  const char *val;
  val = value.getStringValue().c_str();

  SEXP e, ans;
  PROTECT(e = allocVector(LANGSXP, 3));

    SETCAR(e, Rf_install("zorbaPOSIXct"));
    SETCAR(CDR(e), mkString(val));
    SETCAR(CDR(CDR(e)), mkString(fmt));

     ans = Rf_eval(e, R_GlobalEnv);

  UNPROTECT(1);
  return(ans);
}
コード例 #19
0
ファイル: librinterface.c プロジェクト: ianfiske/Rif.jl
/* Evaluate an expression (EXPRSXP, such as one that would
   be returned by Embedded_parse()) in an environment.
   Return NULL on error */
SEXP
EmbeddedR_eval(SEXP expression, SEXP envir) {
    if (! RINTERF_ISREADY()) {
        return NULL;
    }
    RStatus ^= RINTERF_IDLE;
    SEXP res = R_NilValue;
    int errorOccurred = 0;
    int i;
    for(i = 0; i < LENGTH(expression); i++) {
        //res = R_tryEval(VECTOR_ELT(expression,0), envir, &errorOccurred);
        res = Rf_eval(VECTOR_ELT(expression, 0), envir);
    }
    if (errorOccurred) {
        res = NULL;
    }
    RStatus ^= RINTERF_IDLE;
    return res;
}
コード例 #20
0
ファイル: barrier.cpp プロジェクト: rforge/rcpp
SEXP init_Rcpp_cache(){   
    SEXP getNamespaceSym = Rf_install("getNamespace"); // cannot be gc()'ed  once in symbol table
    SEXP RCPP = PROTECT( Rf_eval(Rf_lang2( getNamespaceSym, Rf_mkString("Rcpp") ), R_GlobalEnv) ) ;
    SEXP cache = PROTECT( Rf_allocVector( VECSXP, RCPP_CACHE_SIZE ) );
    
    // the Rcpp namespace
	SET_VECTOR_ELT( cache, 0, RCPP ) ;
	set_error_occured( cache, Rf_ScalarLogical(FALSE) ) ; // error occured
	set_current_error( cache, R_NilValue ) ; // current error
	SET_VECTOR_ELT( cache, 3, R_NilValue ) ; // stack trace
	SET_VECTOR_ELT( cache, RCPP_HASH_CACHE_INDEX, Rf_allocVector(INTSXP, RCPP_HASH_CACHE_INITIAL_SIZE) ) ;
	SEXP stack = PROTECT(Rf_allocVector(VECSXP, RCPP_PROTECT_STACK_INITIAL_SIZE)) ;
	// we use true length to store "top"
	SET_TRUELENGTH(stack, -1 ) ;
	SET_VECTOR_ELT( cache, RCPP_PROTECTION_STACK_INDEX, stack ) ;
	Rf_defineVar( Rf_install(".rcpp_cache"), cache, RCPP );
    
    UNPROTECT(3) ; 
    
    return cache ;
}
コード例 #21
0
ファイル: Runtgz.c プロジェクト: johndharrison/Rcompression
void
R_tarCollectContents(const char *fname, char *bytes, unsigned int numBytes, unsigned int remaining, void *data)
{
    RTarCallInfo *cb = (RTarCallInfo *)data;
    int len = 0;

    if(numBytes < 1) {
	/* Invoke the function to signal the completion of a file. */

        /* Need to make this have the correct length, i.e. cb->offset */
        SEXP tmp = cb->rawData;
        if(GET_LENGTH(cb->rawData) > cb->offset) {
 	    tmp = allocVector(RAWSXP, cb->offset); /* shouldn't need to protect. */
	    memcpy(RAW(tmp), RAW(cb->rawData), cb->offset);
	}
	SETCAR(CDR(cb->e), tmp);
	SETCAR(CDR(CDR(cb->e)), mkString(fname));
	Rf_eval(cb->e, R_GlobalEnv);

	cb->offset = 0;
	
	return;
    }

    /* If we don't preallocate rawData, then this will continue
       to grow the vector just enough to fit the new bytes.*/
    if(cb->rawData == R_NilValue) 
	cb->rawData = allocVector(RAWSXP, numBytes);
    else {
	len = LENGTH(cb->rawData);
        if(len - cb->offset < numBytes) {
	    SET_LENGTH(cb->rawData, len + numBytes);
	    PROTECT(cb->rawData); 
	    cb->numProtects++;
	}
    }

    memcpy(RAW(cb->rawData) + cb->offset, bytes, numBytes);
    cb->offset += numBytes;
}
コード例 #22
0
ファイル: RModule.cpp プロジェクト: johndharrison/RXQuery
zorba::StatelessExternalFunction *
RExternalModule::getExternalFunction(zorba::String name) const
{
   
    SEXP val;
    zorba::StatelessExternalFunction *ans = NULL;
    const char * const str = name.c_str();

    val = findVar(Rf_install(str), env); /* findVarInFrame3(env, Rf_install(str), (Rboolean) TRUE) for just this frame. */

    if(val == R_UnboundValue) {
        // raise an exception with our own class.
        // throw ExternalFunctionData::createZorbaException
        fprintf(stderr, "Can't find %s in module\n", str);
        return(NULL);
//        throw zorba::DynamicException();
    }

    if(TYPEOF(val) == PROMSXP)
        val = Rf_eval(val, R_GlobalEnv);
    if(TYPEOF(val) == CLOSXP) {
        zorba::ItemFactory *itemFactory;
        RXQueryFunction *func;
        SEXP rval;

        zorba::simplestore::SimpleStore* lStore = zorba::simplestore::SimpleStoreManager::getStore();
        zorba::Zorba *zorba = zorba::Zorba::getInstance(lStore);
        itemFactory = zorba->getItemFactory();

        func = new RXQueryClosureFunction(str, itemFactory, val, true);
        PROTECT(rval = makeExternalRObject(func, "RClosureExternalFunction"));
        defineVar(Rf_install(str), rval, getEnvironment());
        UNPROTECT(1);
        ans = dynamic_cast<zorba::PureStatelessExternalFunction*>(func);
    } else {
       ans = R_GET_REF(val, zorba::StatelessExternalFunction);
    }

    return(ans);
}
コード例 #23
0
ファイル: Utils.c プロジェクト: cran/XML
/*
 Because we call this function via Rf_eval(), we end up 
 with an extra call on the stack when we enter recover.
 */
SEXP
stop(const char *className, const char *msg, ...)
{
    char buf[10000];
    SEXP error, e, ns_env, ns_name;

    va_list ap;

    va_start(ap, msg);
/*    Rvsnprintf(buf, sizeof(buf)/sizeof(buf[0]), msg, ap); */
    vsnprintf(buf, sizeof(buf)/sizeof(buf[0]), msg, ap);
    va_end(ap);
    
    PROTECT(error = mkString(buf));

/*
    const char * classNames[] = {"simpleError", "error", "condition"};
    PROTECT(tmp = allocVector(STRSXP, sizeof(classNames)/sizeof(classNames[0])));
    for(i = 0; i < sizeof(classNames)/sizeof(classNames[0]); i++)
	SET_STRING_ELT(tmp, i+1, mkChar(classNames[i]));
    SET_STRING_ELT(tmp, 0, mkChar(className));
    SET_CLASS(error, tmp);
*/

    PROTECT(e = allocVector(LANGSXP, 2));
    PROTECT(ns_name = mkString("XML"));
    ns_env = R_FindNamespace(ns_name);
    SETCAR(e, findVarInFrame(ns_env, Rf_install("xmlStop")));
    SETCAR(CDR(e), error);
    Rf_eval(e, R_GlobalEnv);
    UNPROTECT(3);

/*
    errorcall(error, "%s", msg);
    UNPROTECT(1);
*/
    return(error);
}
コード例 #24
0
ファイル: omxState.cpp プロジェクト: cran/OpenMx
void diagParallel(int verbose, const char* msg, ...)
{
	if (!verbose && !Global->parallelDiag) return;

	const int maxLen = 240;
	char buf1[maxLen];

	va_list ap;
	va_start(ap, msg);
	vsnprintf(buf1, maxLen, msg, ap);
	va_end(ap);

	if (verbose) {
		mxLog("%s", buf1);
	} else if (Global->parallelDiag) {
		ProtectedSEXP theCall(Rf_allocVector(LANGSXP, 2));
		SETCAR(theCall, Rf_install("message"));
		ProtectedSEXP Rmsg(Rf_allocVector(STRSXP, 1));
		SET_STRING_ELT(Rmsg, 0, Rf_mkChar(buf1));
		SETCADR(theCall, Rmsg);
		Rf_eval(theCall, R_GlobalEnv);
	}
}
コード例 #25
0
ファイル: utils.cpp プロジェクト: yutannihilation/dplyr
std::string get_single_class(SEXP x) {
  SEXP klass = Rf_getAttrib(x, R_ClassSymbol);
  if (!Rf_isNull(klass)) {
    CharacterVector classes(klass);
    return collapse_utf8(classes, "/");
  }

  if (Rf_isMatrix(x)) {
    return "matrix";
  }

  switch (TYPEOF(x)) {
  case RAWSXP:
    return "raw";
  case INTSXP:
    return "integer";
  case REALSXP :
    return "numeric";
  case LGLSXP:
    return "logical";
  case STRSXP:
    return "character";
  case CPLXSXP:
    return "complex";

  case VECSXP:
    return "list";
  default:
    break;
  }

  // just call R to deal with other cases
  // we could call R_data_class directly but we might get a "this is not part of the api"
  RObject class_call(Rf_lang2(Rf_install("class"), x));
  klass = Rf_eval(class_call, R_GlobalEnv);
  return CHAR(STRING_ELT(klass, 0));
}
コード例 #26
0
ファイル: Utils.c プロジェクト: cran/XML
SEXP
RSXML_structuredStop(SEXP errorFun, xmlErrorPtr err)
{
    SEXP e, ptr;
    int n = 8;

    if(!err)
       n = 2;

    PROTECT(e = allocVector(LANGSXP, n));

    SETCAR(e, errorFun != NULL && errorFun != R_NilValue ? errorFun :  Rf_install("xmlStructuredStop")); 
    ptr = CDR(e);

    if(err) {
       SETCAR(ptr, mkString(err->message)); 
       ptr= CDR(ptr);
       SETCAR(ptr, ScalarInteger(err->code));
       ptr= CDR(ptr);
       SETCAR(ptr, ScalarInteger(err->domain));
       ptr= CDR(ptr);
       SETCAR(ptr, ScalarInteger(err->line));
       ptr= CDR(ptr);
       SETCAR(ptr, ScalarInteger(err->int2));
       ptr= CDR(ptr);
       SETCAR(ptr, ScalarInteger(err->level));
       ptr= CDR(ptr);
       SETCAR(ptr, err->file ? mkString(err->file) : NEW_CHARACTER(0));
    } else {
       SETCAR(ptr, NEW_CHARACTER(0));    
    }

    Rf_eval(e, R_GlobalEnv);
    UNPROTECT(1);
    /* Shouldn't get back to here! Rf_eval() should raise an error.*/
    return(R_NilValue);
}
コード例 #27
0
ファイル: RJSON.c プロジェクト: cran/RJSONIO
/*
  The "simple"/standard callback to an R function.
 */
int
R_json_basicCallback(void* ctx, int type, const struct JSON_value_struct* value)
{
    RJSONParserInfo *info = ( RJSONParserInfo *) ctx;

    if(info->func != NULL) {
	SEXP result, tmp;
	tmp = CAR(CDR(info->func));

	INTEGER(tmp)[0] = type; /* Names too */

        SET_STRING_ELT(info->names, 0, mkChar(jsonTypeNames[type])); 

	if(value) 
	    SETCAR(CDR(CDR(info->func)), convertJSONValueToR(type, value, info->encoding));
	else if(type == JSON_T_TRUE)
	    SETCAR(CDR(CDR(info->func)), ScalarLogical(1));
	else if(type == JSON_T_FALSE)
	    SETCAR(CDR(CDR(info->func)), ScalarLogical(0));
	else
	    SETCAR(CDR(CDR(info->func)), R_NilValue);

	result = Rf_eval(info->func, R_GlobalEnv);

	if(isLogical(result))
	    return(LOGICAL(result)[0]);
	else if(isInteger(result))
	    return(INTEGER(result)[0]);
	else if(isNumeric(result))
	    return(REAL(result)[0]);
        else
	    return(1);
    }

    return(1);
}
コード例 #28
0
ファイル: rcpp_stop_policy.cpp プロジェクト: ldoyen/VAM
void TimeGreaterThanCensorshipStopPolicy::first() {
    //printf("time=%lf\n",time);
     if(to_init) {
       time=as<double>(Rf_eval(expr,env));
     };
}
コード例 #29
0
ファイル: RInside.cpp プロジェクト: YunhaiZhou/VaRSoft
// TODO: use a vector<string> would make all this a bit more readable
void RInside::initialize(const int argc, const char* const argv[], const bool loadRcpp, 
                         const bool verbose, const bool interactive) {

    if (instance_m) {
        throw std::runtime_error( "can only have one RInside instance" ) ;
    } else {
        instance_m = this ;
    }

    verbose_m = verbose;          	// Default is false
    interactive_m = interactive;

    // generated from Makevars{.win}
    #include "RInsideEnvVars.h"

    #ifdef WIN32
    // we need a special case for Windows where users may deploy an RInside binary from CRAN
    // which will have R_HOME set at compile time to CRAN's value -- so let's try to correct
    // this here: a) allow user's setting of R_HOME and b) use R's get_R_HOME() function
    if (getenv("R_HOME") == NULL) { 		// if on Windows and not set
        char *rhome = get_R_HOME();		// query it, including registry
        if (rhome != NULL) {                    // if something was found
            setenv("R_HOME", get_R_HOME(), 1);  // store what we got as R_HOME
        }					// this will now be used in next blocks 
    }                                           
    #endif

    for (int i = 0; R_VARS[i] != NULL; i+= 2) {
        if (getenv(R_VARS[i]) == NULL) { // if env variable is not yet set
            if (setenv(R_VARS[i],R_VARS[i+1],1) != 0){
                throw std::runtime_error(std::string("Could not set R environment variable ") +
                                         std::string(R_VARS[i]) + std::string(" to ") +
                                         std::string(R_VARS[i+1]));
            }
        }
    }

    #ifndef WIN32
    R_SignalHandlers = 0;               // Don't let R set up its own signal handlers
    #endif

    init_tempdir();

    const char *R_argv[] = {(char*)programName, "--gui=none", "--no-save", 
                            "--no-readline", "--silent", "--vanilla", "--slave"};
    int R_argc = sizeof(R_argv) / sizeof(R_argv[0]);
    Rf_initEmbeddedR(R_argc, (char**)R_argv);

    #ifndef WIN32
    R_CStackLimit = -1;      		// Don't do any stack checking, see R Exts, '8.1.5 Threading issues'
    #endif

    R_ReplDLLinit();                    // this is to populate the repl console buffers

    structRstart Rst;
    R_DefParams(&Rst);
    Rst.R_Interactive = (Rboolean) interactive_m;       // sets interactive() to eval to false
    #ifdef WIN32
    Rst.rhome = getenv("R_HOME");       // which is set above as part of R_VARS
    Rst.home = getRUser();
    Rst.CharacterMode = LinkDLL;
    Rst.ReadConsole = myReadConsole;
    Rst.WriteConsole = myWriteConsole;
    Rst.CallBack = myCallBack;
    Rst.ShowMessage = myAskOk;
    Rst.YesNoCancel = myAskYesNoCancel;
    Rst.Busy = myBusy;
    #endif
    R_SetParams(&Rst);

    if (true || loadRcpp) {             // we always need Rcpp, so load it anyway
        // Rf_install is used best by first assigning like this so that symbols get into the symbol table
        // where they cannot be garbage collected; doing it on the fly does expose a minuscule risk of garbage
        // collection -- with thanks to Doug Bates for the explanation and Luke Tierney for the heads-up
        SEXP suppressMessagesSymbol = Rf_install("suppressMessages");
        SEXP requireSymbol = Rf_install("require");
        Rf_eval(Rf_lang2(suppressMessagesSymbol, Rf_lang2(requireSymbol, Rf_mkString("Rcpp"))), R_GlobalEnv);
    }

    global_env_m = new Rcpp::Environment();         // member variable for access to R's global environment 

    autoloads();                        // loads all default packages, using code autogenerate from Makevars{,.win}

    if ((argc - optind) > 1){           // for argv vector in Global Env */
        Rcpp::CharacterVector s_argv( argv+(1+optind), argv+argc );
        assign(s_argv, "argv");
    } else {
        assign(R_NilValue, "argv") ;
    }

    init_rand();                        // for tempfile() to work correctly */
}
コード例 #30
0
ファイル: barrier.cpp プロジェクト: eddelbuettel/rcpp11
static bool Rcpp_cache_know = false ;
static SEXP Rcpp_cache = R_NilValue ;

#define RCPP_HASH_CACHE_INDEX 4
#define RCPP_CACHE_SIZE 6

#ifndef RCPP_HASH_CACHE_INITIAL_SIZE
#define RCPP_HASH_CACHE_INITIAL_SIZE 1024
#endif 

// only used for debugging
SEXP get_rcpp_cache() {
    RCPP_DEBUG( "get_rcpp_cache (known = %s)", (Rcpp_cache_know ? "true" : "false" ) )
    if( ! Rcpp_cache_know ){
        SEXP getNamespaceSym = Rf_install("getNamespace"); 
        SEXP RCPP       = PROTECT( Rf_eval(Rf_lang2( getNamespaceSym, Rf_mkString("Rcpp11") ), R_GlobalEnv) );
        Rcpp_cache      = Rf_findVarInFrame( RCPP, Rf_install(".rcpp_cache") ) ;
        Rcpp_cache_know = true ;
        UNPROTECT(1) ;
    }
    RCPP_DEBUG( "  [get_rcpp_cache] Rcpp_cache = <%p>", Rcpp_cache )
        
    return Rcpp_cache ;
}

namespace Rcpp {
    	SEXP get_Rcpp11_namespace__impl(){ 
    	    return VECTOR_ELT( get_rcpp_cache() , 0 ) ;
	}
	
}