关于JRI错误的问题

时间:2011-01-04 15:49:41

标签: r java

我尝试用Java运行我的R脚本,因此我安装了JRI。并运行示例,我在64位Windows 7上使用Eclipse。示例代码的一部分如下:

    public static void main(String[] args) {
        System.out.println("Creating Rengine (with arguments)");
 Rengine re=new Rengine(args, false, null);
        System.out.println("Rengine created, waiting for R");
 if (!re.waitForR()) {
            System.out.println("Cannot load R");
            return;
        }

然而,每次我运行它。打印出“创建Rengine(带参数)”之后,它终止打印出“Rengine创建,等待R”

我不知道什么是正确的输入参数,我试图在eclipse运行配置的程序参数下添加“--no-save”,但仍然无济于事。

有什么建议吗?非常感谢

5 个答案:

答案 0 :(得分:27)

参考:http://rosuda.org/JRI/

  • 必须正确设置R_HOME
  • (Windows):包含的目录 R.dll必须在你的PATH中
  • (Mac):嗯,这是Mac,所以它只是 工作;)。
  • (unix):R必须使用编译 --enable-R-shlib和包含libR.so的目录必须在 LD_LIBRARY_PATH。另外libjvm.so和 其他依赖的Java库必须 在LD_LIBRARY_PATH。
  • JRI库必须在当前 目录或中列出的任何目录 的java.library.path。
  • 您也可以指定它 -Djava.library.path =的路径 启动JVM时。当你使用 后者,请务必检查 java.library.path属性首先这样 你不会破坏你的Java。
  • 根据您的系统,R verison和你想要的其他功能 使用,你可能要设置 其他设置,如 R_SHARE_DIR,R_INCLUDE_DIR和 R_DOC_DIR。

我自己的笔记:

在Mac上安装R:

参考:http://cran.r-project.org/mirrors.html 参考:http://cran.r-project.org/bin/macosx/RMacOSX-FAQ.html

http://cran.csiro.au/

下载MacOSX二进制R-2.13.0.pkg

在Mac OS X上安装R(JIR)的Java接口

参考:http://www.rforge.net/JRI/

JIR现在是rJava的一部分。

> install.packages("rJava")
--- Please select a CRAN mirror for use in this session ---
trying URL 'http://cran.csiro.au/bin/macosx/leopard/contrib/2.13/rJava_0.8-8.tgz'
Content type 'application/x-gzip' length 769006 bytes (750 Kb)
opened URL
==================================================
downloaded 750 Kb


The downloaded packages are in
    /var/folders/ZZ/ZZ7tAIJsFU8FDfPPp7H53++++TM/-Tmp-//RtmpCHz9Mh/dow

> library(rJava)
> .jinit()
> s <- .jnew("java/lang/String", "Hello World!")
> print(s)
[1] "Java-Object{Hello World!}"

在Mac OS X上使用Eclipse运行JRI示例Java

将rJava / jri / examples / rtest.java复制到Eclipse JRI/src/。 将JRI.jar从jri目录复制到JRI/lib/并将其添加到构建路径。

rtest.java编译但它没有作为Java应用程序运行。

显然,它需要运行:./run rtest

在检查了rJava包附带的“run”shell脚本(在./jri/内)后,我在Eclipse运行配置中设置了这些脚本:

Environnment:

R_HOME = /Library/Frameworks/R.framework/Resources
PATH=/Library/Frameworks/R.framework/Resources/bin/

此外,示例运行shell脚本设置以下环境变量:

R_INCLUDE_DIR=Library/Frameworks/R.framework/Resources/include
R_SHARE_DIR=Library/Frameworks/R.framework/Resources/share
R_DOC_DIR=Library/Frameworks/R.framework/Resources/doce
JRI_LID_PATH=Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/bin

VM参数:

-Djava.library.path=/Library/Frameworks/R.framework/Resources/library/rJava/jri/

JRI.jar现在在构建路径中引用,即:

/Library/Frameworks/R.framework/Resources/library/rJava/jri/JRI.jar. 

这会自动显示在运行配置中的-cp标签下。

此外,运行配置需要程序参数:--save, --no-save or --vanilla

答案 1 :(得分:1)

有可能找不到jri.dll或R.dll。如果你什么都看不见,甚至没有例外,那么JVM就会崩溃。寻找像hs_pid *这样的文件,告诉你哪个库是罪魁祸首。

答案 2 :(得分:1)

我在自己与Windows上的R斗争中发现了这个问题,尽管在Linux上它只是起作用。

我也发现我正在“创造Rengine(带参数)”,但没有进一步。

找到jri.dll和R.dll,我能够证明:

  • jri.dll - 从当前目录中删除它,生成错误:

    找不到JRI原生库! 请确保JRI本机库位于java.library.path。

    中列出的目录中

    java.lang.UnsatisfiedLinkError:java.library.path中没有jri

(在复制它时,请确保采用正确的32或64位版本以避免“无法在AMD 64位平台上加载IA 32位.dll”类型错误)

  • R.dll位于安装目录C:\ Program Files \ R \ R-2.15.0 \ bin \ x64下 如果在run.bat文件(它是)中错误地设置了PATH,那么你会得到稍微不同的错误

    找不到JRI原生库! 请确保JRI本机库位于java.library.path。

    中列出的目录中

    java.lang.UnsatisfiedLinkError:[CURRENT DIR] \ jri.dll:找不到依赖库

正确设置这两件事(并且没有生成hs_pid *文件)我发现问题是run.bat中缺少R_HOME。添加

set R_HOME=C:\Program Files\R\R-2.15.0\

修好了,现在一切似乎都适合我。我不需要在脚本中添加--save, - no-save或--vanilla。此外,它有'runtest'硬编码,所以./run.bat runtest2不会是DWYM。

简短回答:Windows run.bat脚本被破坏(而Linux'运行'脚本开箱即用)。

答案 3 :(得分:1)

使用rJava,Windows 7 64位时遇到了同样的问题。

这是解决方案。

在eclipse中添加-Djava.library.path =“$ {env_var:PATH}” - &gt;项目 - &gt;运行方式 - &gt;运行配置 - &gt;参数。

确保System.getProperty(“java.library.path”)指向jri.dll

我花了很多时间在这个问题上,所以随时提出任何问题;)

答案 4 :(得分:0)

以下错误可能是由于未设置两个路径,一个未找到r.dll或/和未找到jri.dll。确保系统路径包含32位系统

%R_HOME%\ bin中;%R_HOME%\ bin中\ I386;%R_HOME%\库\ rJava \ JRI \ i386的

还要确保从R控制台安装install.packages(“rJava”)插件

import numpy as np

>> td / np.timedelta64(1, 'h')
26.0