Java调用R并打包成可执行的jar

2023-10-30 12:49

本文主要是介绍Java调用R并打包成可执行的jar,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  rJava是一个R语言和Java语言的通信接口,通过底层JNI实现调用,允许在R中直接调用Java的对象和方法。
  rJava还提供了Java调用R的功能,是通过JRI(Java/R Interface)实现的。JRI现在已经被嵌入到rJava的包中,我们也可以单独试用这个功能。现在rJava包,已经成为很多基于Java开发R包的基础功能组件。
  正式由于rJava是底层接口,并使用JNI作为接口调用,所以效率非常高。在JRI的方案中,JVM直接通过内存直接加载RVM,调用过程性能几乎无损耗,因此是非常高效连接通道,是R和Java通信的首选开发包。
  软件环境:win7 64位 + R3.2.3(32位) + Jdk1.6(32位) +Eclipse4.4
  1.安装rJava 
  方法一:点击R工具栏上的【程序包】—》“设定CRAN数据源”—》China(Beijing 4) —》确定;点击【程序包】—》安装程序包—》选择 rJava —>OK
  方法二:直接在R的命令行窗口,输入以下命令:

install.packages("rJava")
library(rJava)

  2.配置环境变量  
  右击“我的电脑”—》属性 —》高级系统设置 —》环境变量 —》系统环境变量: JAVA_HOME、Classpath、Path。
  对于32位的jdk + 32位的R,请使用:

Path = G:\Program Files\R\R-3.2.3\bin\i386;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
JAVA_HOME = G:\Program Files (x86)\Java\jdk1.6.0_45;
ClassPath = .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;G:\Program Files\R\R-3.2.3\library\rJava\jri;

  对于64位的jdk+64位的R,请使用:  

PATH = G:\Program Files\R\R-3.2.3\bin\x64;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
JAVA_HOME =  G:\Program Files\Java\jdk1.6.0_45;
CLASSPATH = .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;G:\Program Files\R\R-3.2.3\library\rJava\jri;

  3.在Eclipse中,编写Java通过JRI调用R的程序
  右击Eclipse的Package Explorer空白区,创建Java Projects,命名为:Rchart2,创建一个package:com.call,一个class文件:FirstRjava.java,一个Folder: Lib

这里写图片描述
图(1) Rchart2的Java工程目录图

  //FirstRjava.java  

package com.call;import org.rosuda.JRI.Rengine;public class FirstRjava {public static void main(String[] args) {FirstRjava demo = new FirstRjava();demo.callRJava();}public void callRJava(){//启动R引擎Rengine re = new Rengine(new String[]{"--vanilla"},false,null);if (!re.waitForR()) {System.out.println("Cannot load R");return;         }//打印变量String version = re.eval("R.version.string").asString();System.out.println(version);//生成10个随机数,保存至arr[]数组里,并输出double[] arr = re.eval("rnorm(10)").asDoubleArray();for(double a:arr){System.out.println(a+",");}//关闭R引擎re.end();       }}

  4. 加载JRI.jar和配置VM参数
  4.1 在R中安装完rJava后,会在: X: ~R\R-x.x.x\bin\library\rJava\jri发现JRI.jar包,对于本例,目录为:G:\Program Files\R\R-3.2.3\library\rJava\jri,将JRI.jar放到Rchar2/Lib里;右击Rchar2 —》Build Path —》Add External Archives —》选择JRI.jar —>OK
  4.2 配置工程Rchar2/FirstRjava的VM参数
  首先运行一下FirstRjava,将.java文件编译成.class文件,然后,右击FirstRjava—》Run as —》Run Configurations —》在Arguments界面,填写VM arguments:  

-Djava.library.path="G:\Program Files\R\R-3.2.3\library\rJava\jri\i386"

这里写图片描述
图(2) 在32的Eclipse上,配置32位的jri其vm参数

  如果是64位的R,只需要将路径的末尾字段: \i386 改成 \x64,即配置如下:  

-Djava.library.path="G:\Program Files\R\R-3.2.3\library\rJava\jri\x64"

  效果如下:

这里写图片描述
图(3) 用Java通过JRI,调用R

  5.将该工程打包成一个Runable jar
  右击Rchart2 —>Export —> Runable JAR file —> Next —> 选择FirstRjava -Rcahrt2 ,路径: G:\Workspaces\ExportJar(按Browse按钮,自己设置),命名为: FirstRjava.jar,如图(4)、图(5)、图(6)所示:

这里写图片描述
图(4) 右击工程Rchart2–》Export

这里写图片描述
图(5) 点击Runable JAR file

这里写图片描述
图(6) 选择要导出的工程.jar名称和地址,这里设置为FirstRjava.jar,地址:G:\Workspaces\ExportJar

  6. 点击桌面左下角的【开始】—》cmd —>进入到.jar包所在的目录: G:\Workspaces\ExportJar,输入命令:    

java -Djava.library.path="G:\Program Files\R\R-3.2.3\library\rJava\jri\i386" -jar FirstRjava.jar

  如图(7)所示:

这里写图片描述
图(7) 在Dos黑框框里,执行.jar的效果

  R和Java可以相互调用,R通过rJava调用Java,Java通过JRI调用R。
  Java通过JRI调用R的工程代码:http://download.csdn.net/detail/sanqima/9380778

参考文献:http://blog.fens.me/r-rjava-java/

这篇关于Java调用R并打包成可执行的jar的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/308020

相关文章

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格