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

标签 c++ r

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

最佳答案

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

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

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

  3. 您也可以使用 RcppRcppArmadillo它具有适当的“立方体”类型,从 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 之外,它没有做太多事情。对于实际访问,您可能必须手动计算维度步幅——我们根本没有看到对矩阵以外的任何东西有太多需求。上次我需要这个时,我只是使用了来自 Armadilloarma::cube通过RcppArmadillo .

关于c++ - 如何使用 .Call 将 3D 数组从 R 传递到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814442/

相关文章:

c++ - C++ 中的键盘/鼠标输入

c++ - 绘图线在 SDL2 C++ 中闪烁。如何修改我的游戏循环?

r - 访问具有原始函数名称的函数参数

r - 如何使用 RSelenium 在 Windows 机器上登录网站

c++ - 无法将 CStringW 转换为 CStringA

c++ - 最大的内存映射分配大小?

r - GBM 规则生成 - 编码建议

r - data.table 的包装函数在本地环境中不起作用

r - 初学者 R 类(class)的结构

C++ vector 问题