我Rcpp
用来包装一个用类 C ++ 编写的算法(不是我写的)(据我所知,没有 STL,没有提升,没有任何东西)。你可以在这里看到实现的算法(我正在包装kmeans_w_03
)。因此,我numeric
从 R 传入一个向量,然后需要将其转换为double
数组。
目前我正在逐个元素地循环并从另一个元素中填充一个元素,如下所示:
SEXP testfn(SEXP weightvec, SEXP cluster_num_k){
Rcpp::NumericVector weightR(weightvec) ;
int point_num = weightR.size();
double weight[point_num] ;
for(int i = 0; i < point_num; ++i) {
weight[i] = weightR[i];
}
}
但是对于单元素数值向量,我可以利用 Rcpp 的漂亮as
转换功能:
int cluster_num = Rcpp::as<int>(cluster_num_k);
但是,对长度 > 1 的数值向量尝试类似的操作会导致崩溃或错误,具体取决于语法的确切变体:
double weight[point_num] = Rcpp::as<double>(weightvec);
我不一定介意循环,但我完全是新手,我怀疑有更好的方法。我已经阅读了 Rcpp-introduction、hadley 的 wiki 教程和 RcppExamples,但还没有找到任何可以解决这个问题的东西,但这并不意味着我没有错过它。我对 Doxygen Rcpp 文档的阅读是as
可以转换为 STL 向量但不能转换为数组(但我很难阅读这些文档,所以我怀疑我错了)。如果是这样,我想我可以转换为向量,然后转换为数组....
所以我的问题是:有没有更好的(更少的代码行,更具表现力的代码,甚至可能是能够避免内存分配)的方式来将 a 转换NumericVector
为 a double[]
?