8

我想实现一些用 C 代码编写的 R 包。

C 代码必须:

  • 将一个数组(任何类型)作为输入。
  • 产生数组作为输出(不可预测的大小)。

实现数组传递的最佳实践是什么?

目前 C 代码使用.C(). 它通过指针直接从 R 访问数组。不幸的是,不能对输出做同样的事情,因为需要提前知道输出尺寸,这在我的情况下是不正确的。

通过文件将数组从 C 传递到 R 是否有意义?例如,在 ramfs 中,如果使用 linux?

更新 1: 这里讨论了完全相同的问题。在那里,提到了返回未知维度数组的可能选项:

在计算数组之前但在维度已知之后将外部函数一分为二。第一部分将返回维度,然后准备空数组,然后第二部分将运行并填充 R 中的数组。
在我的情况下,只有在执行整个代码时才知道完整维度,因此这种方法意味着运行 C 代码两次。猜测最大数组大小也不是可选的。

更新 2:似乎唯一的方法是使用.Call(),如电源所建议的那样。这里有几个很好的例子:http ://www.sfu.ca/~sblay/RC-interface.ppt 。

谢谢。

4

1 回答 1

11

实现数组传递的最佳实践是什么?

包是否已经用 ANSI C 编写?.C() 会变得又快又容易。

如果您是从头开始编写,我建议使用 .Call() 和 Rcpp。通过这种方式,您可以将 R 对象传递给您的 C/C++ 代码。

通过文件传递数组是否有意义?

阅读“编写 R 扩展”。

于 2012-12-21T04:25:20.757 回答