2016-05-19 15 views
2

私はR :: NumericVectorを持っていて、C++でループを使わずにstd :: vectorに変換することが可能かどうか疑問に思っていました。R :: vector to std :: vector

void someFunction(NumericMatrix mtx){ 
    NumericVector rVec = mtx.row(0); 
    std::vector<int> sVec; 
    sVec = rVec; //<-- I wanna do something like this 
} 

答えて

5

はい、Rcpp入門の例えば第3節を参照してくださいas機能を使用することができます

library(Rcpp) 

sourceCpp('test.cpp') 

mat <- matrix(rnorm(16), 4, 4) 

someFunction(mat) 

ビネット約as<>()。これはほとんどすべてのイントロのにあり、Rcppについてはと書いてありません。

以下の作業例(手作業でインデントされていますが、コードは長い行にすぎません)。

R> cppFunction("std::vector<double> foo(NumericMatrix M) { 
     NumericVector a = M.row(0); 
     std::vector<double> b = as<std::vector<double> >(a); 
     return b; 
    }") 
R> foo(matrix(1:9, 3, 3)) 
[1] 1 4 7 
R> 
1

もちろん、std::vectorを割り当てて入力してください。

TEST.CPP

#include <Rcpp.h> 

// [[Rcpp::export]] 
void someFunction(Rcpp::NumericMatrix mat){ 

    Rcpp::NumericVector vec = mat.row(0); 

    std::vector<double> X(vec.begin(),vec.end()); 
    for (unsigned int i = 0; i<X.size(); i++) { 
    std::cout << "X[" << i << "] = " << X.at(i) << std::endl; 
    } 
} 

test.Rあなたはまた、単に

std::vector<double> X = Rcpp::as<std::vector<double> >(vec); 
関連する問題