2016-11-06 29 views
0

我正在使用C數組,我需要在我的代碼中的某個點將它們轉換爲Rcpp::NumericVector。我嘗試了下面的代碼,但它會拋出一個錯誤(無法從double [5]轉換爲鍵入'SEXP')。什麼是從C數組轉換爲NumericVector的正確方法?C數組到Rcpp NumericVector

library(Rcpp) 
cppFunction(
' 
NumericVector fun() { 
    double data[5] = {1.0, 2.0. 1.0, 2.0, 1.0}; 
    return as<NumericVector>(data); 
} 
') 

回答

3

我知道有兩種方法可以做到這一點:

1:範圍構造

cppFunction(' 
    NumericVector fun() { 
     double data[5] = {1.0,2.0,1.0,2.0,1.0}; 
     return NumericVector(data,data+sizeof(data)/sizeof(*data)); 
    } 
'); 
fun(); 
## [1] 1 2 1 2 1 

2:建立一個STL向量,在SEXP包裹,最後包裹in NumericVector

cppFunction(' 
    NumericVector fun() { 
     double data[5] = {1.0,2.0,1.0,2.0,1.0}; 
     return as<NumericVector>(wrap(std::vector<double>(data,data+sizeof(data)/sizeof(*data)))); 
    } 
'); 
fun(); 
## [1] 1 2 1 2 1 
+0

表格1是優選的。迭代器一樣提到內容的開始加上其範圍。這一切都從一開始就被記錄下來。如果我足夠努力,我確信我可以在這裏找到更早的帖子...... –