传递未评估的参数时,Rcpp_eval会导致段错误

时间:2014-11-25 18:04:57

标签: r rcpp

我想评估Rcpp函数内的变量

SEXP foo(SEXP arg) {
  SEXP x = NULL;
  try {
    x = Rcpp_eval(arg, Environment::global_env());
  } catch(...) {
    printf("Error\n");   
  }
  return x;
}

如果在arg中初始化.GlobalEnv,那么似乎没问题。

x <- 1
foo(substitute(x))

但如果arg未在.GlobalEnv中初始化,则发生段错误

foo(substitute(y))

我做错了什么?或者这是Rcpp中的问题?

1 个答案:

答案 0 :(得分:4)

x设置为R_NilValue以在出错时返回R&lt; NULL,而不是NULL指针。大概你不想使用printf()来处理错误。我想你的意思是

x = Rcpp_eval(arg, Environment::global_env());

arg而不是mode)。

SEXP foo(SEXP arg) {
  SEXP x = R_NilValue;
  try {
    x = Rcpp_eval(arg, Environment::global_env());
  } catch(...) {
    printf("Error\n");
  }
  return x;
}