1

我找不到如何做到这一点。我在 R 中有一个 3D 数组,我想在 C++ 中使用它。有人可以帮忙吗?非常感谢。

4

1 回答 1

4

您已经找到了.Call()允许您将R对象传递给 C++ 的接口。然后你有(至少)两个选择:

  1. 通过 R API 使用 C 和宏,如 R 附带的“编写 R 扩展”手册中所述。它有效,很多人使用它,并且已经通过了时间的考验。这也有点乏味,至少对我来说是这样。

  2. 通过我们的Rcpp包和它在 R API 之上提供的 API 使用 C++。对于多维数组,我们没有太多的例子,但是可以做到。在内部,这些当然只是具有维度属性的连续向量。

  3. 您还可以使用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>

除了返回您传入的数组的维度向量之外,它并没有做太多的事情。对于实际访问,您可能必须手动计算维度步幅——我们根本没有看到对矩阵以外的任何东西有太多需求。上次我需要这个时,我只是通过RcppArmadilloarma::cube犰狳中使用过。

于 2012-05-30T13:22:14.700 回答