JAVA调用R语言

在java中调用R语言 实现在java中调用r语言 阅读详情

1 简介

R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要。关于整合,一方面,R中可以创建JAVA对象调用JAVA方法,另一方面,JAVA中可以转换R的数据类型调用R的函数,互相取长补短。现在也有一个项目JGR,用JAVA做R的图形界面,可以实现高亮显示自动补全等,还能让JAVA和R互相调用。

关于R中调用JAVA,我想主要是为了利用其面向对象的特性,毕竟R语言近来很致力于向面向对象发展,有个很好的项目rJava可以实现,在www.rforge.net/rJava上。R中调JAVA对我似乎意义不大,本文主要介绍JAVA中调用R。

 JAVA很适合开发应用系统,但是数学建模和计算能力非其所长,如果该系统需要进行大量的统计或者优化的计算,调用R是一种很好的方式。JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统。

 目前网上有两种方式使用java调用R。

2       Rserve的方式

2.1     介绍

首先要介绍的是Rserve的方式,这是一个基于TCP/IP的服务器,通过二进制协议传输数据,可以提供远程连接,使得客户端语言能够调用R。目前Rserve作为一个package发布在CRAN上,可以直接使用install.packages("Rserve")进行安装。需要使用时在R控制台下加载该包,然后输入命令Rserve(),开启服务器,就可以供客户端调用。

其客户端可以有多种,这里只介绍JAVA客户端。最早的客户端包是JRclient,在www.rosuda.org/Rserve上还可以下载到,但是现在该项目全部移到了www.rforge.net/Rserve,使用REngine作客户端(和JRI一致),在该网站下可以下载到REngine.jar和RserveEngine.jar两个文件。如果用eclipse开发的话,在工程属性中导入这两个外部的jar包,就可以正常使用了。

首先建立一个新的连接,然后就可以使用eval之类的方法将R中的表达式传到服务器端,通过R求值后传回JAVA中REXP类型的变量,然后打印出来,整个过程非常简单。由于不需要对R进行初始化,因此速度会比较快。在其他系统下可以同时建立多个连接,但是在Windows下只允许同时打开一个连接,后续的连接都会共有相同的命名空间。官网上不建议在Windows下使用Rserve,因为会丧失很多性能,他们推荐可以考虑DCOM的方式。不过DCOM那个工程没有现成的jar包可用,其实如果是拿R做分析系统中的运算引擎,单连接够用了。

2.2     操作步骤

(一)   在R里下载“Rserve”包,并安装

安装好后,

运行如下命令启动“Rserver”

 

> library(Rserve)

> Rserve()

 

 

Starting Rserve...

 "D:\PROGRA~1\R\R-30~1.1\library\Rserve\libs\i386\Rserve.exe" 

> 

 

(二)   建立java工程,导入必要的包,写出测试用例

目录结构如下(标红色的是需要的):

 

Test.java 内容

package com.rTest;

 

import org.rosuda.REngine.REXP;

import org.rosuda.REngine.Rserve.RConnection;

 

public class Test {

    public static void main(String[] args) {

       try {

           RConnection c = new RConnection();

           REXP x = c.eval("R.version.string");

           System.out.println(x.asString());

       } catch (Exception e) {

            e.printStackTrace();

       }

    }

}

运行即可

2.3     可能出现的错误

2.3.1  Connection refused: connect

org.rosuda.REngine.Rserve.RserveException: Cannot connect: Connection refused: connect

    at org.rosuda.REngine.Rserve.RConnection.<init>(RConnection.java:88)

    at org.rosuda.REngine.Rserve.RConnection.<init>(RConnection.java:60)

    at org.rosuda.REngine.Rserve.RConnection.<init>(RConnection.java:44)

    at com.rTest.Test.main(Test.java:9)

 

这是由于“Rserve” 服务器没有启动起来的原因,试试在R内运行如下语句

 

> library(Rserve)

> Rserve()

 

3       JRI 的方式

3.1     介绍

另一种方式是JRI,全名是Java/R Interface,这是一种完全不同的方式,通过调用R的动态链接库从而利用R中的函数等。目前该项目已经成了rJava的子项目,不再提供单独的JRI的版本。因此使用时简单地通过install.packages("rJava")安装rJava就行,在安装文件夹中,可以看到一个jri的子文件夹,里面有自带的例子可以用来测试。

装好后要修改系统的环境变量,在PATH中添加%R_HOME%/bin和%R_HOME%/library/rJava/jri,注意R_HOME的路径要正确,重启系统使之生效。使用时同样在eclipse里导入外部的jar包(在www.rforge.net/rJava下载JRI.jar、REngine.jar和JRIEngine.jar这三个文件),在rJava包安装目录下的jri/examples里有现成的例子(rtest.java和rtest2.java),可以测试是否成功。

3.1.1 install.packages("rJava")安装rJava(如第一种方式一样选择镜像安装)
clipboard[47]
3.1.2 安装完成后再安装目录可以在R的安装目录看到如下的目录结构:
clipboard[48]
3.1.3 接下来依据这个目录结构设置环境变量:
R_HOME=C:\Program Files\R\R-3.3.1
clipboard[49]
PATH后添加C:\Program Files\R\R-3.3.1\bin\x64;C:\Program Files\R\R-3.3.1\library\rJava\jri;(可以用%R_HOME%的写法),但是要特别注意“bin\x64”,系统是64就指定x64文件夹,32位就指定i386文件夹,否则会找不到依赖库;同理rJava\jri下用的dll文件也要与计算机位数一致;
clipboard[50]
clipboard[51]
3.1.4 环境变量配置完成后把安装目录下jri文件夹下的JRI.jar、REngine.jar和JRIEngine.jar放进Java工程添加到编译路径。到这里Java调用R的桥梁就搭建好了;


3.2  重要的一步 Spring MVC的项目中调用语言

  可以说大多数的开发人员最重要的目的就是把这个rjava运用到项目中去。在这个步骤中,我将这个调用的方法写成了一个工具类,但是我遇见了两个大的问题,第一个,因为在项目是在tomcat中发布的,所以tomcat在加载的时候没有找到R的.dll文件,这个问题可以通过System.out.println(System.getProperty("java.library.path"));这句话,找到你用的那个tomcat下面加载文件的目录,将这个jri.dll放进去,重新运行这个就行了。第二个,是我在写工具类的时候发生的一个错误,我没有考虑到自己会多次使用到这个工具,从而导致我的电脑启动了很多个JVM,内存溢出,死机。这个问题,是通过一个单例模式的建立来解决的,我只让这个Rengine在项目中被实例化一次,这样子,他就只能被启动一次,不会导致电脑死机等等   

一定要注意jdk的配置路径,确保环境变量的正确性。


3.3     可能出现的错误

3.3.1  Cannot find JRI native library!

Press <Enter> to continue (time to attach the debugger if necessary)

 

Creating Rengine (with arguments)

Cannot find JRI native library!

Please make sure that the JRI native library is in a directory listed in java.library.path.

 

java.lang.UnsatisfiedLinkError: no jri in java.library.path

    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)

    at java.lang.Runtime.loadLibrary0(Runtime.java:845)

    at java.lang.System.loadLibrary(System.java:1084)

    at org.rosuda.JRI.Rengine.<clinit>(Rengine.java:19)

    at com.rTest.rtest2.main(rtest2.java:73)

检查下path是否正确,如果正确 ,如果配置环境正确,1)用System.out.println(System.getProperty("java.library.path"));输出java.library.path,结果如下:

D:\develop\Java\jdk1.7.0_40\bin;D:\develop\Java\apache-tomcat-8.0.0-RC5\bin

这个信息中的前者是java的安装目录,后者是tomcat的安装目录,把jri.dll分别拷到这两个目录。然后测试问题是否解决。




JAVA调用R语言之Rserve 为什么要用java调用R?  Java作为一个非常流行的编程语言,具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。但是Java缺乏数据分析以及可视化的能力。但是R语言却是专门为统计而生,R语言近年来发展迅速,可以用来进行机器学习,数据挖掘,数据可视化。 为了弥补这种差距, 我们可以将JAVA与R结合起 阅读详情

相关推荐

R语言与Java相互调用的实验报告

R语言与Java相互调用的实验报告概述在本实验报告中,我们将探讨如何使用R语言脚本与Java进行相互调用。R语言是一种用于统计分析和数据可视化的强大编程语言,而Java是一种通用的面向对象编程语言。通过结合这两种语言,我们可以充分发挥它们各自的优势,实现更加复杂和灵活的数据分析和处理任务。一、R语言脚本与Java的集成要实现R语言脚本与Java的相互调用,我们需要使用一些中间件和库来建立它们之间的桥梁。在本实验中,我们将使用rJava库来实现Java与R语言的交互。请将。

HackSquad的博客 528

JAVA通过Rserve调用R语言详解以及常见问题处理

JAVA调用R语言详解以及常见问题处理

weixin_44954820的博客 2564

Java调用R语言

Java调用R语言

java集成r语言_R语言- 实验报告 - 利用R语言脚本与Java相互调用

一、实训内容利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出。在Java中调用R语言程序。本实验通过eclipse编写Java程序的方式,调用R语言的脚本文件进行传值运算,并将执行后的结果返回给Java程序。二、实验课题目标要求能在R x64 3.6.1程序中进行简单的工作空间切换功能,以及掌握基本的shell.exec()和system()函...

weixin_35298139的博客 1586

Java调用R语言的实例

该资源是用Eclipse4.4 + jdk1.6(32位) +R3.2.3(位),开发的一个用Java通过JRI.jar来调用R语言的实例。在运行该代码之前,要在R里安装rJava包,即: install.packags("rJava") 该资料包含JRI.jar,当然,在R里安装完rJava后,在R/R3.2.3/library/rJava/jri目录里也会找到该JRI.jar包。

java调用R语言源码

里面有示例与我自己的解析,共同学习,java学R的可以看看

Java调用R语言实例讲解

Rserve(远程通信模式) 在这种通信模式下,最大的优点是javaWeb项目不需要去维护R的运行,通过TCP/IP协议直接进行通讯,但是有一个很大的缺点是它对中文的支持很弱,尤其是在windows的环境中。基本是不支持中文的,在linux环境下,似乎对中文的支持稍微好些。JRI(嵌入式模式)我体会到最大的优点是它对中文的支持较好,但是使用JRI模式下很容易造成整个系统的崩溃,比如在java调用R的时候,中间出现了异常或者错误,这些错误大致都是致命的,导致java虚拟机崩溃,从而导致整个系统崩溃。

dituirenwu的博客 1268

利用LTspice设计Pt100测温电路

是一种广泛使用的温度传感器,它属于(RTD, Resistance Temperature Detector)的类型,通常用于温度测量。在0°C时,的电阻值为100欧姆,且它的电阻值会随着温度的升高而升高。PT100热电阻温度阻值对应表)因此可以根据这一特性来检测出环境温度。

2301_77033628的博客 2412

java调用r语言例子_Java调用R语言

R是统计计算的强大工具,JAVA是做应用系统的主流语言。JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统。一、Rserve(远程通信模式)Rserve是一个基于TCP/IP的服务器,通过二进制协议传输数据,可以提供远程连接,使得客户端语言能够调用R。Rserve作为一个package发布在CRAN上,可以直接使用install.packages("Rserve")进行安...

weixin_30672649的博客 575

HLM(多层线性模型)在stata中语句

在阅读CEPS中发现有些研究采用的是HLM模型,HLM简单来说用一个方程跑两个回归。举例,对学习成绩影响因素,不同层有不同的影响,如在个体层面上个体特征会对成绩产生影响,在学校层面学校排名等因素会对成绩产生影响,两种因素不在一个层面,每层造成的差异都不相同。 在找相关语句时候发现操作这个语句的软件大多是SPSS和HLM,对于stata操作者并不友好。因此,在有限资料中总结了HLM在stata中的语句,后面会附上学习视频和链接。 先放语句,后面对方程式一个大致解析。由于针对HLM有一本书的介绍,可能一篇文章无

weixin_44652251的博客 1万+

打造会自主学习的 AI 助手:OpenClaw 记忆系统完全指南

这不是科幻,这是我正在使用的系统。我的 AI 助手「小琳」已经运行了一段时间,积累了大量的知识和经验,而且还在不断学习成长。心跳(Heartbeat)是 OpenClaw 的定时轮询机制,可以让 AI 主动做一些事情。你有没有遇到过这样的困扰:每次和 AI 对话,它都像失忆了一样,之前聊过的内容完全不记得?设置定时任务:每天早上 8 点,查询天气和热点新闻,通过钉钉推送给我。让你的 AI 助手拥有持久记忆,能够自主学习、总结经验、不断成长。这不仅仅是一个「能记住事情的 AI」,而是一个。

Honmaple的博客 1633

R语言java调用

下载 Download R 3.6.0 for Windows https://cran.r-project.org/bin/windows/base/ 安装打开Rgui.exe D:\Program Files\R\R-3.6.0\bin\x64 命令提示符输出 脚本文件test.R # My first program in R Programming myString &...

花开陌上无言语,溪水流声自悠然。 1421

线性分类器(Linear Classifier)

线性分类器 如上图所示,这是二维空间中的一个数据集,如果他正好能够被一条直线分成两类,那么我们称它为线性可分数据集,这条直线就是一个线性分类器。 在三维空间中,如果数据集线性可分,是指能够被一个平面分为两类。 在一维空间中,所有的点都在一条直线上,如果线性可分。可以理解为它们能够被一个点分开。 这里的直线、平面、点被分为决策边界。 一个 m 维空间中的数据集,如果能够被一个超平面一分为二,那么这个数据集就是线性可分的,这个超平面就是决策边界。 例如,这是二维平面上的一条直线, 它可以把平面切分成两

xuechanba的博客 1万+

JAVA调用R语言 (未完)

R语言中起服务 > library(Rserve) > Rserve() 在java中调用 public static void main(String[] args) { try { System.out.println("ok"); RConnection c = new RConnection("127.0.0.1"); REXP x = c.eval(...

Angela 3691

用宝塔面板+CentOS 7.6,30分钟搞定DNF手游私服搭建(附全套资源下载)

本文详细介绍了如何使用宝塔面板和CentOS 7.6在30分钟内快速搭建DNF手游私服。通过图形化界面操作,无需复杂命令,即可完成服务端部署、MySQL数据库配置及客户端适配,适合Linux新手快速上手。

weixin_33737774的博客 595

【电商风控】电商风控标注是什么

本篇文章给大家谈谈。

866

windows安装ubuntu安装执行R语言,并且通过java程序调用R语言

windos使用WSL2安装ubuntu,安装R语言,JAVA执行R程序

weixin_44954820的博客 556

多天线技术:5G波束成形&空间复用&空时编码

以提升信号的可靠性。然而,在20世纪90年代中期,研究者们惊讶地发现,多天线技术不仅仅提供分集增益,还可以开启一些单天线系统无法实现的新机遇。,我们可以将信道矩阵 ( H ) 视为一个满秩矩阵,则理论上可以建立min(𝑁𝑇,𝑁𝑅)个独立的数据流,形成一个。波束成形是5G物理层的核心技术,其本质是利用多个天线来增强特定方向上的信号,同时抑制干扰方向的信号。:物理波束成形 = 🔦 类似手电筒的聚焦光束,虚拟波束成形 = 🌊 类似水波的相干叠加。随着 5G 和 6G 时代的到来,多天线技术的作用愈发重

weixin_43199439的博客 1389

java 调用R语言

java 调用R语言采用rsession 来实现, 环境:windows7 , 安装R maven 项目的pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apa

ninuxGihub的博客 702

深入理解SQL注入中的union select 1,2,3....

UNION 用于合并两个查询的结果集

渗透之路,攻防之间皆学问 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

r调用java_R语言直接调用Java代码

R语言直接调用Java代码我们都知道Java语言长期处于霸主地位,在所有编程语言排行榜中,Java也是常年位居第一。在近几年也是爆炸式发展,几乎覆盖到了应用开发的所有领域。而R语言则在统计圈和数据可视化处于佼佼者,如果将Java的通用性和R的专业性紧密结合起来,就可以碰撞出不一样的火花。在之前两篇文章中我已经写了如何在Java程序中调用R代码,想必很多人都知道rjava包是一个R语言和Java语言...

weixin_39922394的博客 452

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JAVA调用R语言之Rserve(二)

之前,我写了一篇文章是 java调用R语言之Rserve,但我发现那种方法比较麻烦。后来我发现了一个比较方便的方法,所以今天从又写了一篇博客,来简单说说。          这次我们需要写一个简单的R语言脚本,然后通过运行这个R脚本,来打开Rserve服务。这样的话,我们每次运行Java程序之前就不用先打开R,再输入程序打开Rserve服务。这样是不是很简单方便。今天我们要用这种方法,和R语言

王亨的博客 4987

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java调用r_Java调用R语言

R是统计计算的强大工具,JAVA是做应用系统的主流语言。JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统。一、Rserve(远程通信模式)Rserve是一个基于TCP/IP的服务器,通过二进制协议传输数据,可以提供远程连接,使得客户端语言能够调用R。Rserve作为一个package发布在CRAN上,可以直接使用install.packages("Rserve")进行安...

weixin_30520605的博客 576
上一篇: Access restriction: The type ‘BASE64Decoder’ is not API (restriction on required library ‘D:\java\jd
下一篇: Myeclipse 中 项目前有感叹号是什么意思
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值