Как использовать функцию сахара Rcpp (mean, var) с вектором‹double›?

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? и есть ли другой способ использовать сахар Rcpp, если он не требует NumericVector?

Спасибо!


person tsinghsia    schedule 26.05.2013    source источник


Ответы (1)


Несколько вещей:

  1. Во-первых, Rcpp sugar работает только с типами Rcpp, поскольку все эти сахарные функции явно запрограммированы — и они запрограммированы для типов R в их представлении Rcpp.

  2. Во-вторых, ваш первоначальный пример неверен. Вы не можете сделать m+=vec[i]; без определения/объявления vec где-то. Каков его размер? Место зарезервировано? Я думаю, вам повезло там.

  3. В-третьих, пожалуйста, просто не говорите, что «он разбился» без воспроизводимого примера.

  4. Eclipse не имеет к этому никакого отношения, но, возможно, вы неправильно настроили свою среду.

person Dirk Eddelbuettel    schedule 26.05.2013