在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、 实训内容
二、 实验课题目标
三、 实验平台1、 系统: Windows 10 Intel(R) Core(TM)i7-7500U CPU @ 2.70GHz 2.90 GHz RAM 8.00GB 2、工具: R x64 3.6.1 notepad.exe eclipse word 2016 四、 实施步骤(1)、R语言调用Java项目程序1、 切换R语言的工作空间。 首先在C:\目录下,新建文件夹为workspace,再打开R x64 3.6.1程序,输入命令:getwd() ,获取当前R语言程序的工作空间。输入如命令:setwd("C:/workspace") ,将workspace作为R语言的工作目录,再加以验证是否切换成功。 图4-1 切换工作空间 2、 编写Java程序。 在R x64 3.6.1程序中,输入命令:shell.exec("notepad") ,打开记事本,编写相应的Java类文件,并保存到C:\ workspace目录下,命名为demo.java。 图4-2 R语言打开notepad 图4-3 Java代码示例 3、 使用R语言编译Java源文件。 首先,这里以demo.java文件,虽然只有一个.java格式的文件,但是也可以将其理解为一个简单的Java项目。在R x64 3.6.1程序中,输入命令:system("javac demo.java") ,编译C:\ workspace目录下的demo.java文件。 图4-4 编译Java文件成功 当在返回的结果中看到[1] 0 ,则表示已经成功进行了编译。如图4-5所示,在C:\ workspace目录下,已经成功生成了demo.class字节文件,也再次验证了编译过程中没有错误。 图4-5 编译结果生成文件 4、 使用R语言运行已经编译的demo.class文件。在R x64 3.6.1程序中,输入命令:system("java demo") ,执行刚编译好的demo.class字节文件。 图4-6 执行成功 很明显,在返回的结果中显示:“利用R语言成功调用Java程序! [1] 0”的字样,这表示R语言成功调用了经过编译的Java项目程序。这里虽然是以简单的单个.java文件做实验,但即使Java项目文件再多,此方法都可以使用。 (2)、Java中调用让语言程序1、安装Rserve包。在R x64 3.6.1程序中,输入命令:install.packages("Rserve") ,下载‘Rserve’程序包。在弹出的mirrors选项中,选择上海的服务器即可。 图4-7 Rserve下载成功 2、加载Rserve包。输入命令:library(Rserve) ,加载Rserve程序包。 3、启动服务。输入命令:Rserve() ,开始启动Rserve服务。 图4-8 Rserve服务开启成功 4、编写调用R语言的Java程序。打开eclipse,新建项目为demo。同时,在demo项目工程名称上右击,选择“Build Path”-“Configure Build Path..”。在Libraries 选项卡中,单击Add External JARs.. ,加载2、3步骤中下载的REngine.jar和Rserve.jar文件 图4-9成功加载Rserve包 5、 编写demo类文件。具体示例代码如下: package demo; import org.rosuda.REngine.Rserve.RConnection; import org.rosuda.REngine.Rserve.RserveException; import org.rosuda.REngine.REXPMismatchException;; public class demo { public static void main(String[] args) throws REXPMismatchException { RConnection connection = null; System.out.println("平均值"); try { connection = new RConnection(); String vetor = "c(1,2,3,4)"; connection.eval("meanVal<-mean(" + vetor +")"); double mean = connection.eval("meanVal").asDouble(); System.out.println("the mean of given vector is=" + mean); } catch (RserveException e) { e.printStackTrace(); } System.out.println("执行脚本"); try { connection.eval("source('c:/ workspace/myAdd.r')"); int num1 = 20; int num2 = 10; int sum = connection.eval("myAdd(" + num1 + "," + num2 + ")").asInteger(); System.out.println("the sum=" + sum); } catch (RserveException e) { System.out.println(e); e.printStackTrace(); } connection.close(); } } 6、 在c:\workspace目录下新建myAdd.r脚本,脚本内容如图所示: 图4-10 myAdd.r脚本 7、 在eclipse中运行该工程的主类文件,运行结果如图4-11所示: 图4-11 执行成功 明显,在返回的结果中,有以下信息:“the mean of given vector is=2.5 执行脚本 the sum=30 ”,这正是Java程序调用R语言执行后,返回的结果。 五、 实验成果(1)、R语言调用Java项目程序在实验步骤中,利用R对编译的demo.class字节文件进行执行时,成功返回如图5-1所示的内容,即“利用R语言成功调用Java程序! [1] 0”,表明利用R语言成功运行了Java项目程序。同时,隐含性地表明R语言可以调用Java语言,对.java文件进行编译和执行。
图5-1 R语言成功调用Java
(2)、Java中调用R语言程序当在eclipse中运行调用R脚本的主类时,在执行反馈信息中,返回了:“the mean of given vector is=2.5 执行脚本 the sum=30 ”。这计算结果,需通过R语言进行,也就是说Java也成功调用了R语言,即调用R语言脚本进行运算。如图5-2所示: 图5-2 Java调用R语言程序成功 六、 实训总结本实验的经验收获和总结,可分点总结如下:
参数之间用空格隔开,java解释器会自动处理,把用空格隔开的每一个参数通过args数组传递给main方法。参数下标从0开始,args[0]就代表1第一个参数。当然输入参数之间可以有多个空格,中间的多个空格会被忽略掉。 |
请发表评论