楼主: 天狮
20740 22

[有偿编程] 关于R和C的混合编程 [推广有奖]

11
zhangtao 发表于 2011-6-30 11:22:51
你把Rcpp的PDF帮助文件看完你真的就会了!
你的那程序首先在R中就没有testdll这个包;
另外,dll文件一般情况是自己编的;
VC++6和GCC会自动生成需要的dll文件。
数学好就是要天天学

12
zhangtao 发表于 2011-6-30 11:24:19
另外,混合编程是当前计算机编程的前沿的前沿,
你一不小心到了前沿,恭喜!
当然这种技术的优秀是革命性的,学编程的都知道。
数学好就是要天天学

13
epoh 发表于 2011-6-30 14:51:07
1.你可选择自行安装MinGW (GCC) Compiler
    [url]http://www.mingw.org/wiki/InstallationHOWTOforMinGW[/url]
    也可选择安装 Rtools (建议,日后还可供 Building R packages)
    [url]http://www.murdoch-sutherland.com/Rtools/index.html[/url]
2. 于 C:/Users/lenovo/Documents
   建立文件夹convolve,放入文件convolve.c

然后在R运行
############
setwd('C:/Users/lenovo/Documents/convolve')
system("R CMD SHLIB convolve.c") #产生两个文件convolve.dll,convolve.o
                                                                 #windows 用到convolve.dll
dyn.load("convolve.dll")

conv <- function(a, b){
.C("convolve",
as.double(a), as.integer(length(a)),
as.double(b), as.integer(length(b)),
ab=double(length(a)+length(b)-1))$ab
}
a=3
b=4
conv(a,b)

14
zhangtao 发表于 2011-7-1 09:41:54
10# epoh
epoh大师的方法非常好!非常感谢!
数学好就是要天天学

15
天狮 发表于 2011-7-1 14:02:41
非常感谢epoh大师!!!您介绍的方法我动手在R上运行,非常完美。另外我还试了几个例子:
> conv(c(1,4),c(1,1))
[1] 1 5 4
> conv(c(1,2,2),conv(c(1,4),c(1,1)))
[1]  1  7 16 18  8
和手算答案都符合。
另外还要谢谢zhangtao大师和各位童鞋,你们的建议和讨论让我受益匪浅。

16
天狮 发表于 2011-7-1 14:31:26
另外问一下epoh大师,是否用Rtools去编译C程序就可以得到dll文件,因为我是直接用您提供的convolve.dll。

17
epoh 发表于 2011-7-1 19:23:03
是的,非常简单.
C:\Rtools\MinGW\bin\gcc.exe
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
zhangtao + 5 + 5 + 5 我很赞同

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

18
bigbigsea 发表于 2012-11-11 00:26:55
非常好,感谢,学习中。

19
ts_xjw 发表于 2013-1-18 19:25:08
感谢!

20
楚韵荆风 学生认证  发表于 2014-11-24 18:05:19
epoh 发表于 2011-6-30 14:51
1.你可选择自行安装MinGW (GCC) Compiler
     http://www.mingw.org/wiki/InstallationHOWTOforMinGW[/u ...
请教@epoh 老师,您在conv<-function(a, b){ }函数中使用了代码:ab=double(length(a)+length(b)-1), 这里对参数ab的赋值是任意的吗?有什么要求或者规定?本人刚了解C和R的调用方法,但是对C的使用不是太熟,现在遇到这方面的问题,不知是否能帮忙解答?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 12:32