C 数组到 Rcpp NumericVector
C array to Rcpp NumericVector
我正在使用 C 数组,我需要在我的代码中的某个时刻将它们转换为 Rcpp::NumericVector
。我尝试了以下代码,但它抛出错误(无法从双精度 [5] 转换为类型 'SEXP')。从 C 数组转换为 NumericVector
的正确方法是什么?
library(Rcpp)
cppFunction(
'
NumericVector fun() {
double data[5] = {1.0, 2.0. 1.0, 2.0, 1.0};
return as<NumericVector>(data);
}
')
我知道有两种方法可以做到这一点:
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
我正在使用 C 数组,我需要在我的代码中的某个时刻将它们转换为 Rcpp::NumericVector
。我尝试了以下代码,但它抛出错误(无法从双精度 [5] 转换为类型 'SEXP')。从 C 数组转换为 NumericVector
的正确方法是什么?
library(Rcpp)
cppFunction(
'
NumericVector fun() {
double data[5] = {1.0, 2.0. 1.0, 2.0, 1.0};
return as<NumericVector>(data);
}
')
我知道有两种方法可以做到这一点:
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