我已经写了一个函数“富”在C,我想从R程序调用。该函数接受一个矩阵作为输入,并对其执行一些操作(比如说,将每个元素加1)。虽然很容易在单个矢量R .C接口:传递多维数组
.C("foo", n=as.integer(5), x=as.double(rnorm(5)))
以foo实现为
void foo(int *nin, double *x)
{
int n = nin[0];
int i;
for (i=0; i<n; i++)
x[i] = x[i] * x[i];
}
如何传递一个二维数组?如果我将“double * x”更改为“double ** x”,则会出现分段错误。任何指针赞赏。
'.C'增加了复制参数去C程序的开销时间,然后复制回结果,而'.Call'不 – transang
@transang如果目标是_modify_从传递的对象R,那么你必须用C复制它;您可以使用'.C()'自动安全地复制副本,或者使用'.Call()'手动执行并且发生错误的概率很高。 Rcpp方式也需要一个内存拷贝,在Dirk的回答中是'Rcpp :: clone(M)'语句。当然,Rcpp对于严肃的C级开发来说太棒了。 –