如何通过调用将3D数组从R传递到C++

如何通过调用将3D数组从R传递到C++,c++,r,C++,R,我找不到该怎么做。我有一个三维数组在R,我想使用它在C++中。 有人能帮忙吗? 非常感谢。 你已经找到了.Celphi接口,它允许你把对象传递给C++。然后,您至少有两个选择: 通过R API使用C和宏,正如R随附的“编写R扩展”手册中所描述的那样。它是有效的,许多人都使用它,而且它已经通过了时间的考验。这也有点乏味,至少对我的口味来说是这样 使用C++通过我们的包和API提供的API在顶部的API。对于多维数组,我们没有太多的例子,但是可以这样做。在内部,这些当然只是具有维度属性的连续向量 你

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

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

通过R API使用C和宏,正如R随附的“编写R扩展”手册中所描述的那样。它是有效的,许多人都使用它,而且它已经通过了时间的考验。这也有点乏味,至少对我的口味来说是这样

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

你也可以使用go,它有一个合适的“立方体”类型,一个从2d矩阵到3d矩阵的泛化-参见文档

编辑:下面是一个简单的示例:

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>
除了返回传入的数组的维度向量之外,它没有什么作用。对于实际访问,您可能需要手工计算维度跨步-我们只是没有看到对矩阵以外的任何东西的需求。上次我需要这个,我刚使用ARMA::从Vist.Cube中获得的.< /p> 你已经找到了.Cub接口,它允许你把对象传递给C++。然后,您至少有两个选择:

通过R API使用C和宏,正如R随附的“编写R扩展”手册中所描述的那样。它是有效的,许多人都使用它,而且它已经通过了时间的考验。这也有点乏味,至少对我的口味来说是这样

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

你也可以使用go,它有一个合适的“立方体”类型,一个从2d矩阵到3d矩阵的泛化-参见文档

编辑:下面是一个简单的示例:

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>

除了返回传入的数组的维度向量之外,它没有什么作用。对于实际访问,您可能需要手工计算维度跨步-我们只是没有看到对矩阵以外的任何东西的需求。上一次我需要它时,我只是使用了via的arma::cube。

下面是如何在c++中定义2d和3d数组:希望至少能让你开始c中几乎没有多维数组。我不知道R,但要将任何内容传递给C,您应该将3d数组转换为1d缓冲区,并将其与步幅信息一起传递。下面是如何在C++中定义2d和3d数组:希望至少能让您开始使用C中几乎没有多维数组。我不知道R,但要将任何内容传递给C,您应该将3d数组转换为1d缓冲区,并将其与步幅信息一起传递。