将 R::vector 转换为 std::vector
Convert R::vector to std::vector
我有一个 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
}
当然,只需分配 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);
是的,参见关于 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>
我有一个 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
}
当然,只需分配 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);
是的,参见关于 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>