2016-06-21 61 views
-1

我正在使用Rcpp庫將C++中包含雙精度的向量向量轉換爲R中的矩陣。本質上我想調用此函數,並讓它在R中返回一個矩陣。但是,在這兩種方法中,控制檯打印「錯誤:矢量」。如何使用Rcpp庫將包含C++中雙精度的向量向量轉換爲R中的矩陣?

我的第一個是利用卷繞函數轉換方法:

// [[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

「NUMERIC(res)」表示什麼?我的控制檯上出現了與此相關的錯誤。 –

+0

@AdiSidapara對不起,我用錯了宏。它應該是'REAL()'。該宏將檢索一個指向底層矢量數據的原始指針。 – bgoldst