我想实现一些用 C 代码编写的 R 包。
C 代码必须:
- 将数组(任何类型)作为输入。
- 生成数组作为输出(大小不可预测)。
实现数组传递的最佳实践是什么?
目前 C 代码被调用.C()
。它通过指针直接从 R 访问数组。不幸的是,无法对输出执行相同的操作,因为需要提前知道输出尺寸,但在我的情况下并非如此。
通过文件将数组从 C 传递到 R 有意义吗?例如,在ramfs中,如果使用linux?
更新1:
Here https://stat.ethz.ch/pipermail/r-help/2009-November/218194.html讨论了完全相同的问题。
在那里,提到了返回尺寸未知的数组的可能选项:
在计算数组之前但尺寸已知之后,将外部函数分成两部分。第一部分将返回维度,然后准备空数组,然后第二部分将运行并填充 R 中的数组。
在我的例子中,只有执行整个代码后才能知道完整的维度,因此此方法意味着运行 C 代码两次。猜测最大数组大小也不是可选的。
更新2:似乎唯一的方法是使用.Call()
相反,正如权力所建议的那样。以下是一些很好的例子:http://www.sfu.ca/~sblay/R-C-interface.ppt http://www.sfu.ca/~sblay/R-C-interface.ppt.
Thanks.
实现数组传递的最佳实践是什么?
该包是否已经用 ANSI C 编写? .C() 会变得又快又容易。
如果您从头开始编写,我建议使用 .Call() 和 Rcpp。通过这种方式,您可以将 R 对象传递给您的 C/C++ 代码。
通过文件传递数组有意义吗?
No
阅读“编写 R 扩展”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)