Re: [程式] R的迴圈

看板Statistics作者時間16年前 (2010/02/10 17:26), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
事實上, 我不曾在我的程式用過 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)
文章代碼(AID): #1BSdkmhN (Statistics)
討論串 (同標題文章)
文章代碼(AID): #1BSdkmhN (Statistics)