全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
46359 17
2011-07-01
悬赏 5 个论坛币 已解决
由于epoh老师的帮助,我初步知晓了如何将R和C进行混合编程
请见帖子:https://bbs.pinggu.org/thread-1126777-1-1.html
但在那里我使用的是epoh老师提供的dll文件,并没有自己去生成dll文件

后来我又到论坛逛了逛,发现了一个epoh老师如何设置Rtools的帖子
请见:https://bbs.pinggu.org/thread-920948-1-1.html
在那里epoh老师详细地予以了介绍,我按部就班的进行了操作,但是还是有问题。
1,首先说明我的操作系统是预装的vista homebasic
2,   我用的是R 2.12.2
3,我下载的是Rtools 2.12
4,我在安装安装Rtools 2.12的时候除了安装语言选英语和安装路径更换为D:\setup\Rtools外,其他未调整。
5,我按照epoh老师的要求先测试MinGW。
(1)打开Command Prompt,
(2)然后c>gcc --help (vista中命令提示符是c>,而不是epoh老师那里的c:\>gcc --help )
结果显示:
'GCC--HELP' is not recognized as an internal or external command ,
operable program or batch file
输入c>gcc
同样显示:
'GCC' is not recognized as an internal or external command ,
operable program or batch file
(3)然后安装epoh老师的要求增设MinGW路径和R的路径
即:计算机(点右键)—属性—高级系统设置—高级—环境变量—系统变量
在那里我发现没有Rtools的路径,便新建了路径,变量名是path,变量值是D:\setup\Rtools\bin
因为我的R装在D:\setup\R software
所以我将变量名path下的变量值变为D:\setup\Rtools\bin;D:\setup\Rtools\MinGW\bin;D:\setup\R software\R-2.12.2\bin
中间用分号隔开。
(4)我以为我已经设置好了,再进行测试,打开Command Prompt—输入c>gcc --help
结果还是显示:
'GCC--HELP' is not recognized as an internal or external command ,
operable program or batch file
于是我就有些许的绝望了,不知如何是好。真不希望是操作系统的原因,因为R的跨平台性是很好的(推出Rtools也很好吧)

希望各位老师和同学指点迷津。

其实我的问题简单述来就是:如何用Rtools生成相应的dll文件。

在我贴出的第二个帖子里,epoh老师给了
/* File: matprod1.c */
/* Calculates the product of two matrices X and Y */

void matprod1(double *X, int *nrX, int *ncX,
              double *Y, int *nrY, int *ncY, double *ans)
{
  double sum;
  int ii, jj, kk;
  
  for (ii=0; ii<*nrX; ii++){
    for (jj=0; jj<*ncY; jj++){
      sum = 0;
      for (kk=0; kk<*ncX; kk++){
        sum = sum + X[ii+*nrX*kk]*Y[kk+*nrY*jj];
      }
      ans[ii+*nrX*jj] = sum;
    }
  }
}

告诉我们将其用记事本存为matprod1.c
但由于我的Rtools没有调试好,所以不能产生以下步骤:

在c碟放进 matprod1.c文件(不可放桌面)

  in "Command Prompt" window


  type Rcmd SHLIB matprod1.c


  就是:


  c:\>Rcmd SHLIB matprod1.c


  将会产生两个文件matprod1.dll,matprod1.o

即不能得到我们需要的matprod1.dll






最佳答案

epoh 查看完整内容

麻烦你先做两件事: 1.c:\>path #press enter 确认一下路径是否依你所言设置好 D:\setup\Rtools\bin;D:\setup\Rtools\MinGW\bin;D:\setup\R software\R-2.12.2\bin 2.执行下列程序,看结果如何 于 C:/Users/lenovo/Documents 建立文件夹convolve,放入文件convolve.c 然后在R运行 ############ setwd('C:/Users/lenovo/Documents/convolve') system("R CMD SHLIB convolve.c") #产生两个文件convolve.d ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-7-1 17:11:43
麻烦你先做两件事:
1.c:\>path     #press enter
    确认一下路径是否依你所言设置好
  D:\setup\Rtools\bin;D:\setup\Rtools\MinGW\bin;D:\setup\R software\R-2.12.2\bin

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
}

conv(c(1,4),c(1,1)
conv(c(1,2,2),conv(c(1,4),c(1,1)))
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-3 20:22:46
谢谢epoh老师!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-5 04:32:45
楼主提到
其实我的问题简单述来就是:如何用Rtools生成相应的dll文件。
epoh 发表于 2011-7-1 17:11
然后在R运行
############
setwd('C:/Users/lenovo/Documents/convolve')
system("R CMD SHLIB convolve.c")


我个人是R与C的新手,不敢多说。
但我曾在网上看到一个说明,
http://sites.google.com/site/rprojectnotes/advanced_r/r_and_c
似乎,要注意是否是Windows环境。恰好那个网址是matprod1的例子。
我想楼主应当可以参考看看。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-5 04:37:56
http://sites.google.com/site/rprojectnotes/advanced_r/r_and_c
参考看看。
似乎Windows与Unix环境下,指令会有所不太一样。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-27 18:40:58
这个是真有用!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群