2016-06-21 2 views
-1

Я использую библиотеку Rcpp для преобразования вектора векторов, содержащих двойники в C++, в матрицу из R. Я действительно хочу назвать эту функцию и вернуть ей матрицу мне в R. Однако в обоих методах консоль prints "error: vector".Как вы преобразовываете вектор векторов, содержащих двойники в C++, в матрицу из R, используя библиотеку Rcpp?

Моего первый метод для преобразования использует функцию обертки:

// [[Rcpp::export]] 
Rcpp::NumericMatrix returnRetrieval(string fileName){ 
//bm.real_psi is a globally declared vector of vectors 
return Rcpp::wrap(bm.real_psi); 
} 

Мой второй метод создает новую матрицу и возвращение к коду R.

//also tried this and same error occured 
Rcpp::NumericMatrix createMatrix(vector< vector <double> > input){ 
    Rcpp::NumericMatrix storeContainer(input.size(), input[0].size()); 
    for(int i = 0; i < input.size(); i++){ 
    for(int j = 0; j <input[0].size(); j++){ 
     storeContainer(i, j) = input[i][j]; 
    } 
    } 
    return storeContainer; 
} 

Это немного расстраивает, поэтому, если кто-то может помочь, он будет очень признателен! Спасибо :)

ответ

2

IIRC, это то, как я достиг этого в прошлом (хотя я сделал это с IntegerMatrix):

NumericMatrix res(input[0].size(),input.size()); 
double* resp = REAL(res); 
for (size_t ci = 0; ci < res.ncol(); ++ci) 
    std::copy(input[ci].begin(),input[ci].end(),resp+ci*res.nrow()); 
return res; 

std::copy() должен быть максимально эффективным, я думаю.

+0

Что означает «ЧИСЛО (res)»? Я получаю ошибки на моей консоли, связанные с этим. –

+0

@AdiSidapara Извините, я использовал неправильный макрос. Это должно быть 'REAL()'. Макрос извлекает необработанный указатель на базовые векторные данные. – bgoldst