C数组转换为Rcpp NumericVector

4

我正在使用C数组,需要在代码某个点将其转换为Rcpp::NumericVector。我尝试了以下代码,但出现错误(无法将double [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个回答

7
我知道有两种方法可以实现这个: 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

首选表格1。类似于迭代器的引用指向内容开头加上其范围。这自始至终都有记录。如果我足够努力,我肯定能在这里找到更早的帖子…… - Dirk Eddelbuettel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接