Rcpp在初始化时无法将'SEXP {aka SEXPREC *}'转换为'double'

时间:2016-04-13 11:10:37

标签: r rcpp

我试图复制Rcpp

中的R矢量化和

我首先尝试以下无故障代码:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double call(NumericVector x){
  return sum(x);
}

输入call(Time)

> call(Time)
[1] 1919853

然后环境版本也很好用,

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double call(){
  Environment env = Environment::global_env();
  NumericVector Time = env["Time"];
  return sum(Time);
}

输入call()

> call()
[1] 1919853

现在我正在尝试一些奇怪的事情,

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double call(){
  Environment base("package:base");
  Function sumc = base["sum"];
  Environment env = Environment::global_env();
  NumericVector Time = env["Time"];
  double res = sumc(Time);
  return res;
}

这次我收到一条错误消息:

trycpp.cpp:10:25: error: cannot convert ‘SEXP {aka SEXPREC*}’ to ‘double’ in initialization
double res = sumc(Time);

知道出了什么问题吗?

1 个答案:

答案 0 :(得分:4)

你不能在Rcpp的一个向量上调用R函数(即sumc()。执行此操作:

// [[Rcpp::export]]
double mycall(){
  Environment base("package:base");
  Function sumc = base["sum"];
  Environment env = Environment::global_env();
  NumericVector Time = env["Time"];
  double res = sum(Time);
  return res;
}

这里sum()是Rcpp糖功能。