作者ADORIAN ()
站内Statistics
标题Re: [程式] R的回圈
时间Wed Feb 10 17:26:06 2010
事实上, 我不曾在我的程式用过 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)