2016-11-06 2 views
0

C 배열로 작업하고 있는데 코드의 어느 시점에서 Rcpp::NumericVector으로 변환해야합니다. 다음 코드를 시도했지만 오류가 발생했습니다 (double [5]에서 'SEXP'유형으로 변환 할 수 없음). C 배열을 NumericVector으로 변환하는 올바른 방법은 무엇입니까?C 배열 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에 랩, 그리고 마지막으로 포장 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이 선호됩니다. 반복기와 마찬가지로 콘텐츠의 시작 부분과 해당 범위를 참조합니다. 그 모든 것은 처음부터 문서화되어 있습니다. 내가 열심히 노력했다면 나는 또한 여기에 이전 게시물을 찾을 수있을 것이라고 확신한다. –