2016-11-06 2 views
0

Я работаю с массивами C, и мне нужно их преобразовать в Rcpp::NumericVector в некоторый момент моего кода. Я попробовал следующий код, но он выдает ошибку (не может преобразовать из double [5], чтобы набрать «SEXP»). Каков правильный способ преобразования из массива C в NumericVector?C array to 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, и, наконец, оберните в 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

Fo rm 1 является предпочтительным. Итератор - это ссылка на начало содержания плюс его протяженность. Все это было задокументировано с самого начала. Если бы я достаточно старался, я уверен, что и здесь мог бы найти более раннюю запись ... –

Смежные вопросы