JRI返回代码10

时间:2015-06-01 10:42:40

标签: java r exception rjava jri

我是R的新手,并试图从java调用一个简单的rJava测试程序。我已经完成了必要的路径设置 我正在尝试创建代码失败的Rengine实例。问题似乎与 C [R.dll + 0x26036] 有关。但是,我是新手,无法弄清楚这个问题。欢迎任何帮助。

我的代码:

import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;
public class First_R {
public static void main (String args []) {

    System.out.println("Start");
    Rengine.DEBUG = 5;

    System.out.println("Starting Rengine..");
    System.out.println("R_HOME =" + System.getenv("R_HOME"));
    final Rengine re = new Rengine ();
    // Check if the session is working.
    if (!re.waitForR()) {
        return;
    }
    re.assign("x", new double[] {1.5, 2.5, 3.5});
    REXP result = re.eval("(sum(x))");
    System.out.println(result.asDouble());
    re.end();
}

}

输出:

开始 启动Rengine .. R_HOME = D:\ Program Files \ R \ R-3.2.0 \ bin \

Java Runtime Environment检测到致命错误:

  

EXCEPTION_ACCESS_VIOLATION(0xc0000005)at pc = 0x000000006c726036,   pid = 4588,tid = 1872

JRE版本:Java(TM)SE运行时环境(8.0_45-b14)(版本1.8.0_45-b14)  Java VM:Java HotSpot(TM)64位服务器VM(25.45-b02混合模式windows-amd64压缩oops)  有问题的框架:  C [R.dll + 0x26036]

无法编写核心转储。默认情况下,在Windows的客户端版本

上未启用小型转储

包含更多信息的错误报告文件保存为:

2 个答案:

答案 0 :(得分:2)

在您的环境设置中,请将R_HOME更改为D:\Program Files\R\R-3.2.0而不是R_HOME = D:\Program Files\R\R-3.2.0\bin\,如果能完成,请告诉我:),请注意您的代码适用于我(使用nicola& #39;的建议也是如此)

package rundavid;

import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;



public class RunDavid {


public static void main (String args []) {



    System.out.println("R_HOME =" + System.getenv("R_HOME"));


    Rengine re = new Rengine (new String [] {"--vanilla"}, false, null);
    // Check if the session is working.
    if (!re.waitForR()) {
        return;
    }
    re.assign("x", new double[] {1.5, 2.5, 3.5});
    REXP result = re.eval("(sum(x))");
    System.out.println(result.asDouble());
    re.end();
}}

输出:

run:
R_HOME =C:\Program Files\R\R-2.15.3
7.5
BUILD SUCCESSFUL (total time: 0 seconds)

您还需要设置D:\Program Files\R\R-3.2.0\bin\x64;D:\Misc\RLib\rJava\jri\x64 这需要在vm选项中设置,而不是作为环境变量。 这是它在Netbeans中完成的方式(即使用的方式):

  1. 右键单击该项目,然后单击属性
  2. 然后选择run
  3. 按如下方式插入VM选项: How to set VM options in Net beans

答案 1 :(得分:1)

您必须正确初始化Rengine。试试这个:

Rengine re = new Rengine (new String [] {"--vanilla"}, false, null);

当你创建引擎时,一切都应该有效。没有参数的构造函数"通过挂钩到一个正在调用此构造函数的现有的初始化R实例来创建一个新引擎。 (来自doc)。这会导致错误,因为现有Rengine没有运行(我猜)。