我主要使用 R,但最终想使用 Rcpp 与一些接收和返回二维数值数组的 C++ 函数交互。因此,要开始使用 C++ 和 Rcpp,我想我只需创建一个小函数,将我的可变长度数值向量的 R 列表转换为 C++ 等效项,然后再返回。
require(inline)
require(Rcpp)
test1 = cxxfunction(signature(x='List'), body =
'
using namespace std;
List xlist(x);
int xlen = xlist.size();
vector< vector<int> > xx;
for(int i=0; i<xlen; i++) {
vector<int> test = as<vector<int> > (xlist[i]);
xx.push_back(test);
}
return(wrap(xx));
'
, plugin='Rcpp')
这就像我期望的那样工作:
> test1(list(1:2, 4:6))
[[1]]
[1] 1 2
[[2]]
[1] 4 5 6
诚然,我只是完成了非常详尽的文档的一部分,但是有没有比使用 for 循环更好(即更像 Rcpp)的方法来进行 R -> C++ 转换?我认为可能不是,因为文档提到(至少使用内置方法)as
“提供的灵活性较低,并且目前处理将 R 对象转换为原始类型”,但我想检查一下,因为我是个新手在这个区域。