我已經寫了一個函數「富」在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級開發來說太棒了。 –