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