如何使用Rcpp sugar函数(mean,var)和vector <double>?</double>

时间:2013-05-26 02:43:29

标签: r rcpp syntactic-sugar

vector<double> Stock::getReturns(unsigned n){
vector<double> returnSelect;
for (int i=0;i<n;i++)
    returnSelect.push_back(returns[i]);
return returnSelect;
}

double Stock::getMeanReturn(unsigned n){
double m=0;
vector<double> vec=getReturns(n);
for (int i=0;i<n;i++){
    m+=vec[i];
}
m=m/n;
return m;
};

这些带有vector<double>的代码完美无缺,但是当我用vector<double>替换NumericVector时,我可以在Eclipse中构建代码,但是当我运行它时它崩溃了。 NumericVector似乎是个问题。

Rcpp::NumericVector Stock::getReturns(unsigned n){
Rcpp::NumericVector returnSelect;
for (int i=0;i<n;i++)
    returnSelect.push_back(returns[i]);
return returnSelect;
}

double Stock::getMeanReturn(unsigned n){
double m;
Rcpp::NumericVector vec=getReturns(n);
m=mean(vec);
return m;
};

所以问题是为什么Eclipse无法处理NumericVector?如果它不采用NumericVector,还有其他方法可以使用Rcpp糖吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

一些事情:

  1. 首先,Rcpp sugar仅适用于Rcpp类型,因为所有这些糖函数都是明确编程的 - 并且它们在Rcpp演示中被编程为R类型。

  2. 其次,您的初步示例是错误的。如果没有在某处定义/声明m+=vec[i];,则无法执行vec。它的大小是多少?这个空间是保留的吗?我觉得你很幸运。

  3. 第三,如果没有可重现的例子,请不要说'它崩溃'。

  4. Eclipse与它无关,但您可能以错误的方式设置了环境。