我是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的客户端版本
上未启用小型转储包含更多信息的错误报告文件保存为:
答案 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
中完成的方式(即使用的方式):
run
答案 1 :(得分:1)
您必须正确初始化Rengine
。试试这个:
Rengine re = new Rengine (new String [] {"--vanilla"}, false, null);
当你创建引擎时,一切都应该有效。没有参数的构造函数"通过挂钩到一个正在调用此构造函数的现有的初始化R实例来创建一个新引擎。 (来自doc)。这会导致错误,因为现有Rengine
没有运行(我猜)。