之前论坛里有人提到过R与C#进行交互的问题,这样做的目的其实很显然,那就是像C#这样的高级语言在开发应用程序方面十分有优势,而R语言强大的统计计算功能又让人垂涎欲滴,所以如果能将这两者结合起来,那么就有可能开发出兼有界面友好和功能强大这两个特点的应用程序出来(先憧憬一下[s:11] )。
就目前而言,一种可行的办法是利用R (D)COM接口来实现R与C#的交互。事实上,在去年的R会议上,有一场报告中涉及到的RExcel软件就是利用了这一技术。下面我也给出一个简单的例子。
这是一个用C#写出的具有用户界面的小程序, 其功能通过下面这张字符画就能说清了。
水水水水水水水水水水水水水水水水水水灌水 <br />
水水水水水水水水灌灌灌灌灌灌灌灌灌灌灌灌 <br />
灌灌灌灌灌灌灌灌水水水水水灌水水水水水水 <br />
水水水水灌水水水水水水水水灌水水水水水水 <br />
水水水水灌水水水水水水水灌水水水水灌水水 <br />
水水水水灌水水水水灌灌灌灌灌灌灌灌灌灌水 <br />
水水水水灌水水水水灌水水水水水水水灌水水 <br />
水水水水灌水水水水灌水水水水水水水灌水水 <br />
水水水水灌水水水水灌水水水灌灌水水灌水水 <br />
水水水水灌水水水水灌水水水灌水水水灌水水 <br />
水水水水灌水水水水灌水水水灌水水水灌水水 <br />
水水水水灌水水水水灌水水水灌水水水灌水水 <br />
水水水水灌水水水水灌水水水灌水水水灌水水 <br />
水水水水灌水水水水灌水水水灌水水水灌水水 <br />
水水水水灌水水水水灌水水水灌水水水灌水水 <br />
水水水水灌水水水水水水水灌水灌水水水水水 <br />
水灌灌灌灌水水水水水水水灌水水灌灌水水水 <br />
水水水灌水水水水水水水灌水水水水水灌灌水 <br />
水水水水水水水水水灌灌水水水水水水灌灌水 <br />
水水水水水水水水灌水水水水水水水水水灌水
这个程序是可以在R中实现的,我的做法就是将字符存为图片,然后利用rimage包读取像素点。因此程序的核心都是R语言,而C#的作用就是提供用户界面。
程序放在附件中,其中附带了源代码,因为我毕竟不是学编程的,所以很多语句可能写得不合规范,还请大家原谅。
另外说一下程序运行所需的条件:
1、.NET Framework 2.0 以上。这个没办法,因为是用C# 2005编的。.NET Framework 2.0 可以到这里下载:
http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&DisplayLang=zh-cn;
2、R/Scilab (D)COM Server,在这里可以下到:
http://cran.r-project.org/contrib/extra/dcom/R_Scilab_DCOM3.0-1B5.exe;
3、两个R软件包,rscproxy和rimage,在附件中有它们的zip包,可以直接在R中安装。其中rimage包现在无法通过网络安装,因为CRAN上其Windows版本暂时不可用。
此外,关于R与C#之间的交互,可以参考
http://www.codeproject.com/KB/cs/RtoCSharp.aspx。