r语言for循环的c(),R 中的for 循环用C怎么做?

#---------------------------

下面我将我在本论坛学到的dot-C方法的一个例子的details贴出来供大家参考:

PS:关于相关软件的安装和测试还请各位看官参考我在本版块的另外两篇 帖子:

“如何安装和调试Rtools”和“关于R和C的混合编程”

#--------------------------

#矩阵乘法(R中已有命令为%*%)

#c程序

void matprod  (double *X, int *nrX, int *ncX,

double *Y, int *nrY, int *ncY, double *ans)

{

double sum;

int ii, jj, kk;

for (ii=0; ii

for (jj=0; jj

sum = 0;

for (kk=0; kk

sum = sum + X[ii+*nrX*kk]*Y[kk+*nrY*jj];

}

ans[ii+*nrX*jj] = sum;

}

}

}

#生成dll文件

setwd('C:/Users/lenovo/Documents/matprod')#与放matprod文件夹的位置一致

system("R CMD SHLIB matprod.c") #产生两个文件matprod.dll,matprod.o

#windows 用到matprod.dll

#加载dll文件

dyn.load("matprod.dll")#装载或加载

#编写函数

matprod

.C("matprod", as.numeric(A), nrow(A), ncol(A), as.numeric(B),

nrow(B), ncol(B), ans = numeric(nrow(A) * ncol(B)))$ans

}

#测试

A

B

ans=matprod(A,B)

> ans

[1] 30 36 42 66 81 96

dim(ans)

> ans

[,1] [,2]

[1,]   30   66

[2,]   36   81

[3,]   42   96

> A%*%B #与R中build-in函数结果对比完全一样

[,1] [,2]

[1,]   30   66

[2,]   36   81

[3,]   42   96

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值