3

我是 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 运行时环境检测到一个致命错误:

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

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

无法写入核心转储。默认情况下,在 Windows 的客户端版本上不启用小型转储

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

4

2 回答 2

2

在您的环境设置中,请将 R_HOME 更改为D:\Program Files\R\R-3.2.0而不是 R_HOME = D:\Program Files\R\R-3.2.0\bin\,请让我知道这是否有效:),请注意您的代码对我有用(也使用 nicola 的建议)

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 选项,如下所示: 如何在 Net bean 中设置 VM 选项
于 2015-06-02T07:28:01.420 回答
1

您必须正确初始化您的Rengine. 尝试这个:

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

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

于 2015-06-01T11:29:55.130 回答