将R :: vector转换为std :: vector

时间:2016-05-19 16:22:55

标签: r stdvector rcpp

我有一个R :: NumericVector,我想知道是否可以在不使用c ++循环的情况下将其转换为std :: vector。

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

2 个答案:

答案 0 :(得分:6)

是的,请参阅例如关于as<>()的Rcpp简介的第3节。这几乎是关于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 :(得分: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

library(Rcpp)

sourceCpp('test.cpp')

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

someFunction(mat)

您也可以使用as功能

std::vector<double> X = Rcpp::as<std::vector<double> >(vec);