注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

悠游自在

似水流年,悠游天地,自在我心

 
 
 

日志

 
 
 
 

java调用自己写的R语言函数  

2016-08-25 16:59:46|  分类: IT技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
参考:
https://www.douban.com/note/85247917/
http://cos.name/cn/topic/408834/

摘要:使用R搭建统计分析服务器,Java通过TCP/IP协议来与R服务器交互,输入分析数据及参数,获得统计分析结果。

步骤:
1. 搭建Rserve服务器,从而可以监听统计分析请求
参考文章:R与JAVA的整合 (http://www.lijian001.com/r/blog_comment.asp?article_id=199
安装 R :$ sudo apt-get install r-base
启动并进入R环境:$ R
安装Rserve包:> install.packages("Rserve")
加载Rserve包:> library("Rserve")
启动Rserve(默认为demon方式启动): > Rserve

至此R这一端的准备工作已经就绪,Rserve启动后即使用q()退出R环境,Rserve也依旧运行。

2. 下载Rserve的jar包,这样可以直接调用已经做好的API,而不需要纠缠于R端的TCP/IP协议
地址:http://www.rforge.net/Rserve/files/
jar包共有两个:REngine.jar和RserveEngine.jar
把下载的jar包拷贝到java工程中,如图所示:

设置java工程的project structure(我用的是IntelliJ IDEA),导入并编译jar包,如下图所示

在需要调用R的java代码,文件头上,import相应的namespace:
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.REXP;
import org.rosuda.REngine.Rserve.RserveException;
下面是实际从java中调用R自定义函数的代码示例,其中要注意给R的函数传参数时,需要先用c.assign进行参数准备,否则会报错“eval failed, request status: error code: 127”
protected void testCallR(String name)
{
String cmdLoadSource="source(fileName, encoding = encodingArg)";
String cmdInit="InitDemoDateEnv()";

try {
RConnection c = new RConnection();
REXP x = null;
String cmdCall="PersonInfo.Portrait(\'"+name+"\')";//"R.version.string"

System.out.println("调用函数1,装载R..."+cmdLoadSource);
c.assign("fileName", "D:/work/sz/开发环境/gbase/数据环境构建脚本/DemoData.r");//给R传参数,需要先用c.assign进行参数准备
c.assign("encodingArg","UTF-8");//给R传参数,需要先用c.assign进行参数准备
c.eval("source(fileName, encoding = encodingArg)");

System.out.println("调用函数2,初始化:InitDemoDateEnv...");
c.eval(cmdInit);

System.out.println("call myfunc..."+cmdCall);
c.assign("pname",name);
x = c.eval("myfunc(pname)");

String tx=x.asString();
System.out.println(tx);
} catch (RserveException e) {
e.printStackTrace();
}
catch(org.rosuda.REngine.REXPMismatchException e1)
{
e1.printStackTrace();
}
}
  评论这张
 
阅读(28)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018