Re: [程式] R的迴圈
事實上, 我不曾在我的程式用過 R 去 call C,
所以我也沒有什麼經驗.
但依你的例子上的需求, 是可以依照投影片的範例解決的
我把我剛試的結果 post 給你, 請參考看看
/************ 以下的 code 存成 useC1.c 檔 ***************/
void useC(double *x, int *dimR, int *dimC, double *y){
int k1 = 0, k2 = 0;
double temp = 0.0;
for( k1 = 0 ; k1 < dimR[0] ; k1++ ){
temp = 0.0;
for( k2 = 0 ; k2 < dimC[0] ; k2++ ){
temp = temp + x[k2+k1*dimC[0]];
}
y[k1] = temp / dimC[0];
}
}
/************ 以上的 code 存成 useC1.c 檔 ***************/
打開 terminal 到你存的 useC1.c 的路徑下, 並輸入
$ R CMD SHLIB useC1.c
再打開 R
$ R
在 R 中輸入以下的 code
x <- matrix(c(1:500000), nrow=50000, ncol=10, byrow=T)
y <- rep(0,dim(x)[1])
z <- c(t(x))
dyn.load("useC1.so")
out <- .C("useC", xx = as.double(z),
d1 = as.integer(dim(x)[1]),
d2 = as.integer(dim(x)[2]),
yy = as.double(y)
)
cat(out$yy[1],"\n")
最後的 out$yy 就是你所要的. 在計算上所花的時間還不到 1 秒
至於要怎麼有效的傳入 R matrix, 或在 C 中 call R 的 function
你就要請教 google 了(或者版上有人給個 reference)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.114.102
※ 編輯: ADORIAN 來自: 140.113.114.102 (02/10 17:26)
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
程式
2
7