繁体   English   中英

如何使用.Call将3D数组从R传递到C ++

[英]How to pass a 3D array from R to C++ using .Call

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

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

  1. 通过R API使用C和宏,如R中附带的“Writing R Extensions”手册中所描述的那样。很多人使用它并且它已经通过了时间的考验。 它也有点乏味,至少对我的口味而言。

  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>

除了返回传入的数组的维度向量之外,它没有做太多。对于实际访问,您可能必须手动计算维度 - 我们根本没有看到对矩阵之外的任何东西的大量需求。 我最后一次需要这个,我只使用Armadillo的 arma::cube来通过RcppArmadillo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM