前一段要在java里调用r,经历过python里调用r的简单方便后,java里调用r编译环境简直令我痛不欲生!

现在的JRI项目是在R里面安装JRI包后,R里面就能用java了(也不知道谁会没事在R语言里用java==),也自动把java到r的内容安进来了。三个jar包,JRI.jar,REngine.jar,RServe.jar(REngine处理不了多线程,我又下了个JRIEngine.jar)。 导入环境啥的我就不提了,都是泪。(Myeclipse处理tomcat服务的时候也不知道有什么问题,执行的时候找不到Rscript的运行环境,我又去改tomcat的.sh文件,不过从中发现shell编程是件棒极了的事儿啊!太好用了。)搞通了运行环境,开始跑R的程序,哎?怎么第一次能跑通,返回第二次再运行直接卡死。网上一查REngine不支持多线程,就是你在java里开两个r环境,那sorry,直接线程出错。网上有人说实例化啥的,应该能用,不过看官网上说JRIEngine解决了这个问题,试了试发现如果每次都调用前产生一个的r环境运行程序就可以,这是我现在能让程序跑起来的唯一招数了,不过面对多用户的请求不知道会产生什么样的后果:

System.out.println("Before Create Rengine");  
try {  
	JRIEngine re = (JRIEngine) JRIEngine.getLastEngine();  
	if(re == null){  
	re = new JRIEngine(new String [] {"--vanilla"});  
	}  
	re.parseAndEval("rm(list=ls());" +  
				"library(igraph);"+  
				"library(infotheo)");  
}catch (REngineException e) {  
		e.printStackTrace();  
		ViewGlobalCal dataBlock = null;  
		return dataBlock;  
}  
comments powered by Disqus