JAVA调用R语言之Rserve(二)
来源:互联网 发布:在香港用淘宝 编辑:程序博客网 时间:2024/05/14 11:33
之前,我写了一篇文章是java调用R语言之Rserve,但我发现那种方法比较麻烦。后来我发现了一个比较方便的方法,所以今天从又写了一篇博客,来简单说说。
这次我们需要写一个简单的R语言脚本,然后通过运行这个R脚本,来打开Rserve服务。这样的话,我们每次运行Java程序之前就不用先打开R,再输入程序打开Rserve服务。这样是不是很简单方便。今天我们要用这种方法,和R语言的demo()函数,画一个简单的词云。
首先,我们建一个R脚本:
library(Rserve)Rserve()</span>
提示:路径最后不要有中文字符,就是有的时候可能不识别,或包其他错误。
首先我们要导入 包,大家可以查看我的另一篇博文。我们新建一个类,用来初始化Rserve服务。代码如下
package rserve;import javax.xml.transform.Source;import org.rosuda.REngine.Rserve.RConnection;import org.rosuda.REngine.Rserve.RserveException;/** * 启动Rserve服务 * @author henry wang * */public class Rservel {private static String R_EXE_PATH="D:\\Program Files\\R\\R-3.3.1\\bin\\Rscript.exe";private static String R_SCRIPT_PATH="D:\\Program Files\\R\\R-3.3.1\\MyScript\\Rserve.R";public static RConnection getRConnection(){try {RConnection rConnection=new RConnection(); return rConnection;} catch (RserveException e) {// TODO: handle exceptionSystem.out.println("正在启动Rserve服务......");try {Runtime rn=Runtime.getRuntime();/* * 不建议写成直接写成rn.exec("R_EXE_PATH R_SCRIPT_PATH"),如果这样学的画前面定义的R_EXE_PATH,R_SCRIPT_PATH会提示 * 这两个变量没有用到 * 运行也许会出错,提示错误如下: * java.io.IOException: Cannot run program "D:\Program": CreateProcess error=2, 系统找不到指定的文件。 */String[] commandArgs={R_EXE_PATH,R_SCRIPT_PATH}; rn.exec(commandArgs); Thread.sleep(5000);} catch (Exception e2) {// TODO: handle exceptione2.printStackTrace();}return getRConnection();}}}</span>
说明:R_EXE_PATH 是Rscript.exe或者R.exe的路径,这两个都可以。R_SCRIPT_PATH是R脚本的路径。
package rserve;import java.awt.Graphics;import java.awt.Image;import java.awt.MediaTracker;import java.awt.Toolkit;import javax.swing.JFrame;import org.rosuda.REngine.REXP;import org.rosuda.REngine.Rserve.RConnection;public class WordCloud extends JFrame{private static final long serialVersionUID=1L;static Image img;public static void main(String[] args) throws Exception{// TODO Auto-generated method stubWordCloud wc=new WordCloud();REXP xp=wc.getRobj();//获得R对象wc.PlotDemo(xp,wc);//错误}private REXP getRobj() throws Exception{RConnection c=Rserve.getRConnection();c.setStringEncoding("utf8");//设置字符编码//返回R的版本REXP Rservesion=c.eval("R.version.string");System.out.println(Rservesion.asString());System.out.println("\n----------绘图演示--------");System.out.println("");REXP xp=c.parseAndEval("jpeg('test.jpg',quality=90)");c.eval("library(wordcloud)");c.voidEval("colors=c('red','blue','green','yellow','purple')");c.parseAndEval(" data(SOTU);wordcloud(SOTU,min.freq=10,colors=colors);dev.off()");xp=c.parseAndEval("r=readBin('test.jpg','raw',3000*3000);unlink('test.jpg');r");return xp;}public void PlotDemo(REXP xp, JFrame f)throws Exception{img=Toolkit.getDefaultToolkit().createImage(xp.asBytes());MediaTracker mediaTracker=new MediaTracker(this);mediaTracker.addImage(img, 0);mediaTracker.waitForID(0);f.setTitle("Test Image");f.setSize(img.getWidth(null),img.getHeight(null));f.setDefaultCloseOperation(EXIT_ON_CLOSE);f.setVisible(true);}public void paint(Graphics g){g.drawImage(img, 0, 0, null);}}
c.parseAndEval(" data(SOTU);wordcloud(SOTU,min.freq=10,colors=colors);dev.off()");这个句子的冒号里面都是一些R语句,只不过每句话后面都有一个分号。
运行结果如下:
参考博客:http://blog.csdn.net/xsdxs/article/details/49886927
转载请注明原文链接:http://blog.csdn.net/wzgl__wh/article/details/52958716
1 0
- JAVA调用R语言之Rserve(二)
- JAVA调用R语言之Rserve
- java调用R语言--以Rserve方式
- R语言和java通信(Rserve)
- 菜鸟笔记--Java通过Rserve调用R语言
- 在Java中使用Rserve调用R
- 使用Rserve从java中调用R
- 从Java里调用R – 使用Rserve
- 从Java里调用R – 使用Rserve
- java调用R语言之调用
- R语言-04-Rserve安装与配置
- R语言服务器程序 Rserve详解
- R语言服务器程序 Rserve详解
- Rserve的R语言客户端RSclient
- JAVA调用R语言之安装
- Rserve 实现java与R的互通
- RUtils -- 建立在Rserve之上的Java与R语言通信工具集
- RUtils -- 建立在Rserve之上的Java与R语言通信工具集
- 关于Android的主题设置的文章
- 泛型 (中) - 解析通配符:
- OJ1914(改进,通过OJ检测)
- Socket数据通信
- Spring
- JAVA调用R语言之Rserve(二)
- openwrt启动流程
- 如何在Java程序中读写系统剪切板的数据
- 如何直观理解AUC评价指标?
- AppBarLayout CollapsingToolbarLayout 的进一步使用
- Linux利用list_head结构实现双向链表
- <ROS> pluginlib理解与示例
- 文件上传-------fileUpload
- Canvas文字渲染