C 外部接口

C 外部接口,c,r,C,R,我想实现一些R包,用C代码编写 C代码必须: 以数组(任何类型)作为输入 将数组生成为输出(大小不可预测) 实现数组传递的最佳实践是什么 此时使用.C()调用C代码。它通过指针直接从R访问数组。不幸的是,不能对输出执行同样的操作,因为需要提前知道输出维度,这在我的例子中是不正确的 通过文件将数组从C传递到R有意义吗?例如,在ramfs中,如果使用linux 更新1: 讨论了完全相同的问题。 其中提到了返回未知维度数组的可能选项: 将外部函数一分为二,在计算数组之前,但在已知维数之后。第一部分

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

C代码必须:

  • 以数组(任何类型)作为输入
  • 将数组生成为输出(大小不可预测)
实现数组传递的最佳实践是什么

此时使用
.C()
调用C代码。它通过指针直接从R访问数组。不幸的是,不能对输出执行同样的操作,因为需要提前知道输出维度,这在我的例子中是不正确的

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

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

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

更新2:似乎唯一的方法是使用
.Call()
代替,正如电源建议的那样。这里有几个好例子:

谢谢

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

包是否已经用ANSI C编写。这样一来,C()就变得简单快捷了

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

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

没有


阅读“R扩展”。

阅读“写R扩展手册”,尤其是“节”。对于C和C++函数与R的接口,也考虑了包,其中许多比R代码中的<代码>、()(代码)>和<代码>更简单、更健壮。在StackOverflow以及从Rcpp包页面链接的Eddelbuettel和Francois网站上可以找到许多有用的问题和答案。R编程问题属于StackOverflow,R统计问题属于此处!其他一些参考资料:Hadley Wickham最近的一篇文章(pdf),以及提供Rcpp包示例的。