以我的理解,在Rcpp和C ++之间转换向量将创建新向量,如下所示。我的理解正确吗?
将Rcpp向量转换为C ++向量时,我们使用Rcpp::as<T>()(例如Rcpp::as<std::string>用于Rcpp::CharacterVector)。
std::vector<std::string>创建后,原始Rcpp元素将被复制到C ++向量中std::string。这意味着修改新创建的C ++矢量元素不会影响原始的Rcpp矢量元素。
将C ++向量转换为Rcpp向量时,我们使用Rcpp::wrap()。创建具有相应类型的Rcpp向量,并将C ++元素作为Rcpp对象复制到Rcpp向量中。这意味着修改新创建的Rcpp矢量元素不会影响原始的C ++矢量元素。
正确,以下功能可以执行转换:
// conversion from R to C++
Rcpp::as<T>();
// conversion from C++ to R
Rcpp::wrap();
Run Code Online (Sandbox Code Playgroud)
简而言之,将数据从Rcpp对象移至C ++向量,反之亦然,将导致复制。这里对此进行了一些解释:
有关模板的更多信息,请参见Rcpp扩展小插图。
从Rcpp::*Vector到的费用详细信息std::vector<T>可以在这里找到:
我应该更喜欢Rcpp :: NumericVector而不是std :: vector吗?
避免复制的一种方法是在可能的情况下重新使用内存。这暗示在这里:
在Rcpp中确定NumericVector和arma :: vec
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |