我找不到如何执行此操作。我在 R 中有一个 3D 数组,我想在 C++ 中使用它。 有人可以帮忙吗? 非常感谢。
最佳答案
您已经找到了.Call()
接口(interface),它将允许您传递R。对象到 C++。然后你有(至少)两个选择:
按照 R 附带的“编写 R 扩展”手册中的描述,通过 R API 使用 C 和宏。它有效,很多人都在使用它,并且它已经通过了时间的考验。这也有点乏味,至少对我来说是这样。
通过我们的 Rcpp 使用 C++包及其在 R API 之上提供的 API。多维数组我们没有太多例子,但是可以做到。在内部,这些当然只是具有维度属性的连续 vector 。
您也可以使用 Rcpp去RcppArmadillo它具有适当的“立方体”类型,从 2d 矩阵到 3d 的泛化——参见 Armadillo文档。
编辑:这是一个最小的例子:
R> library(inline)
R> f <- cxxfunction(signature(ms="numeric"), plugin="Rcpp", body='
+ Rcpp::NumericVector m(ms);
+ return m.attr("dim");
+ ')
R> A <- array(1:8, c(2,2,2)) # 3-d array
R> f(A) # call C++ function defined above to get dim array
[1] 2 2 2
R>
除了返回您传入的数组的维度 vector 之外,它没有做太多事情。对于实际访问,您可能必须手动计算维度步幅——我们根本没有看到对矩阵以外的任何东西有太多需求。上次我需要这个时,我只是使用了来自 Armadillo 的 arma::cube
通过RcppArmadillo .
关于c++ - 如何使用 .Call 将 3D 数组从 R 传递到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814442/