`
郑云飞
  • 浏览: 812563 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java调用R语言包(JRI方式),bug记录

 
阅读更多

一,软件环境

   win10  64位  +  eclipse + jdk 1.7

 

二,使用JRI方式的步骤

    2.1   首先安装rJava(两种方式)

        (1)  使用命令install.packages("rJava")安装 ;

        (2)  使用RGui的图形化界面安装;

                  程序包 --> 安装程序包 --> 选择CRAN (China (beijing 4) [https])   --> 选择rJava  确定即可;

   2.2   修改环境变量;

         (1)  在path中添加R_HOME变量(D:\Program Files\R\R-3.2.3)

         (2) 在path中添加 %R_HOME%\bin;%R_HOME%\bin\i386;%R_HOME%\library\rJava\jri;%R_HOME%\library\rJava\jri\i386

   2.3   建立java工程(Rtest)

          (1), 首先到www.rforge.net/rJava下载JRI.jar、REngine.jar和JRIEngine.jar这三个文件,导入到Rtest中;

          (2), 拷贝 rJava包安装目录下的jri/examples里有现成的例子(rtest.java和rtest2.java)到Rtest中;

          (3), 运行测试;

 

三 ,运行结果失败!

   3.1 出现如下异常

 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: D:\Program Files\R\R-3.2.3\library\rJava\jri\jri.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(Unknown Source)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at org.rosuda.JRI.Rengine.<clinit>(Rengine.java:19)
    at com.rtest.rtest.main(rtest.java:62)

大致意思就是 64位的JVM不能加载32位的 .dll文件;

然后我把原来的jri.dll文件替换成64位的jri.dll文件,测试运行控制台抛出如下异常:

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: D:\Program Files\R\R-3.2.3\library\rJava\jri\jri.dll: %1 不是有效的 Win32 应用程序。
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1807)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at org.rosuda.JRI.Rengine.(Rengine.java:19)
    at R_Test.rtest.main(rtest.java:63)

后来观察R和rJava的安装目录发现,目录下包含x64和i386(32位)文件夹,所以把2.2步骤中的环境变量全部修改指向x64文件夹;具体如下:

         %R_HOME%\bin;%R_HOME%\bin\x64;%R_HOME%\library\rJava\jri;%R_HOME%\library\rJava\jri\x64

 然后重新启动eclipse(重新加载java.library.path变量)  很重要!!!  

运行rtest.java和rtest2.java ;测试成功!

分享到:
评论

相关推荐

    java调用R语言源码

    Java调用R语言源码是一种跨语言交互的技术,允许Java应用程序执行R语言的统计计算、数据处理或图形生成等功能。这种技术在数据科学领域尤其有用,因为R语言提供了丰富的统计库和优秀的数据可视化工具,而Java则有...

    Java调用R语言的方法

    ### Java调用R语言的方法详解 #### JRI (Java/R Interface) **简介:** JRI是一种允许Java程序通过单线程方式与R进行交互的工具。它能够将R的动态库加载到Java环境中,并提供一系列Java API来实现R的功能。JRI支持...

    Java通过JRI调用R

    该资源是用Eclipse4.4 + jdk1.6(32位) + R3.2.3(32位)开发的,用Java通过JRI调用R的案例, 先启动R的计算引擎:Rengine Rengine re = new Rengine(new String[]{"--vanilla"},false,null); 然后,调用R里的rnorm()...

    Java调用R语言的实例

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

    java调用R语言实现数据挖掘

    ### Java调用R语言实现数据挖掘的关键知识点 #### 一、使用R开发数据挖掘平台 在数据科学领域,R语言以其强大的统计分析能力和丰富的库支持而受到广泛欢迎。结合Java的强大功能,可以构建高效的数据挖掘平台。为了...

    利用Rserve实现Java调用R脚本.pdf

    具体到Java与R语言的整合,文中提出了三种主要的调用途径:进程方式、嵌入式模式JRI和远程调用模式Rserve。进程方式依赖于R环境提供的可执行文件Rscript.exe来运行R脚本,而嵌入式模式JRI则是将R引擎嵌入到Java应用...

    电力系统负荷预测软件中R语言与Java的接口方法研究.pdf

    Java与R语言之间的通信可以通过多种方法实现,比如使用Rserve包、JRI包或者通过Java调用R语言命令行等。其中,Rserve包提供了一个服务器,允许远程连接和通信,而JRI(Java/R Interface)则提供了更底层的接口,它...

    java和R语言整合的web项目

    2. **Rserve**: Rserve是一个R语言的服务器,可以提供远程接口让其他程序(如Java)直接调用R函数。Java通过Rserve的API与R进行交互,这种方式更高效且易于管理。 3. **JRI (Java-R Interface)**: JRI是R的Java绑定...

    利用Rserve实现Java调用R脚本.zip

    本篇将详细探讨如何通过Rserve来实现Java调用R脚本,从而在Java程序中充分利用R语言的功能。 Rserve是一个开源的R语言服务端,它允许远程客户端与R环境进行通信,执行R脚本并获取结果。这使得Java等其他语言能够...

    JRI&&JRIEngine;&&REngine;.zip

    当需要在Java应用程序中集成R语言的功能时,JRI(Java-R Interface)和其相关的组件如JRIEngine和REngine就起到了关键作用。 标题"JRI&&JRIEngine;&&REngine;.zip"所提及的是一个包含Java调用R语言所需的核心组件的...

    java与R交互

    Java与R语言的交互是现代数据科学和软件开发中的一项重要技术。这两种语言各有优势,Java以其强大的企业级应用能力和跨平台性而著名,而R则在统计分析和数据可视化领域独占鳌头。本资源旨在帮助开发者了解如何在Java...

    JRI.jar&JRIEngine.jar&REngine.jar

    然而,有时我们需要将R语言的功能融入到Java应用程序中,这就需要用到我们今天要讨论的三个关键组件:JRI.jar、JRIEngine.jar和REngine.jar。 JRI,全称为Java-R Interface,是由Rserve项目提供的一个Java接口,它...

    R开发相关jar包

    在IT行业中,R语言是一种广泛使用的统计计算和图形绘制的编程环境,尤其在数据分析和机器学习领域备受青睐。为了在Java环境中与R进行交互,开发者通常会利用特定的库或工具,而这些jar包就是实现这种交互的关键组件...

    Java Native Interface Specification R1.1

    Java Native Interface(JNI)是Java开发中的一个重要概念,它允许Java代码与其他语言编写的代码进行交互,尤其是与C或C++编写的本地应用程序接口(API)进行交互。JNI在Java应用程序中扮演着桥梁的角色,使得Java...

    java-R-example:这个例子展示了如何执行嵌入在Java中的R代码

    参考JRI Java / R接口 从Java调用R 系统要求玛文从源代码编译JRI以获取JRI.jar和本机库(Linux中的libjri.so) 在此示例中,同时提供了JRI.jar和Linux x64的本机库安装和配置R sudo yum安装R 导出R_HOME = / usr / ...

    RJava帮助文档

    这里是Java调用R的api java可以通过Rserve方式.也可以通过JRI方式

    java后端源码-REngine:R的通用Java接口,支持多个后端,如JRI和Rserve

    java原始源码引擎 REngine 是一个通用的 Java 接口,用于支持多个后端,例如 和 。 它允许 Java 代码评估 R 表达式、推送和拉取数据。 由于它与后端无关,因此可以使用相同的代码将 R 嵌入 Java 进程或使用 R 服务器...

    R开发文档

    rJava是连接R和Java的重要桥梁,使得Java应用程序可以直接调用R脚本中的函数和执行R命令。 1. **下载rJava** - 在R中使用命令 `install.packages("rJava")` 来安装rJava包。 - 也可以从R的操作程序中直接下载。 ...

Global site tag (gtag.js) - Google Analytics