2014-12-01 4 views
0

Так что я пытаюсь использовать R из Java через JRI. Я использую плагин RJava для Eclipse, и два тестовых файла, которые поставляются с rJava, работают нормально (rtest и rtest2). Но при попытке запустить этот простой фрагмент кода, я получаю EXCEPTION_ACCESS_VIOLATION:EXCEPTION_ACCESS_VIOLATION при попытке использовать RJava

public static void main(String... args) { 
    Rengine re = new Rengine(); 

    if (!re.waitForR()) { 
     System.out.println("Unable to load R"); 
     return; 
    } else 
     System.out.println("Connected to R"); 

    re.eval("x=c(1:10)"); 
    double d = re.eval("mean(x)").asDouble(); 
    System.out.println(d); 
} 

Выход я получаю:

Connected to R 

A fatal error has been detected by the Java Runtime Environment: 

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006c726096, pid=5284, tid=7868 

JRE version: Java(TM) SE Runtime Environment (8.0_25-b18) (build 1.8.0_25-b18) 
Java VM: Java HotSpot(TM) 64-Bit Server VM (25.25-b02 mixed mode windows-amd64 compressed oops) 
Problematic frame: 
C [R.dll+0x26096] 

Failed to write core dump. Minidumps are not enabled by default on client versions of Windows 

An error report file with more information is saved as: 
C:\Users\gebruiker\workspace64\RTest\hs_err_pid5284.log 

If you would like to submit a bug report, please visit: 
    http://bugreport.sun.com/bugreport/crash.jsp 
The crash happened outside the Java Virtual Machine in native code. 
See problematic frame for where to report the bug. 

Полный журнал: http://pastebin.com/18wHWihB

Я вижу это в журнале, он должен что-то с этим делать? (Неправильное использование функции Eval? Я просто скопировал пример, хотя ...)

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) 
j org.rosuda.JRI.Rengine.rniParse(Ljava/lang/String;I)J+0 
j org.rosuda.JRI.Rengine.eval(Ljava/lang/String;Z)Lorg/rosuda/JRI/REXP;+53 
j org.rosuda.JRI.Rengine.eval(Ljava/lang/String;)Lorg/rosuda/JRI/REXP;+3 
j Main.main([Ljava/lang/String;)V+35 
v ~StubRoutines::call_stub 

Если кто-то может помочь, я теряюсь и оценил бы его сильно :)

ответ

3

Instanitiate rengine как ниже, я только что сделал 10 в качестве размера по умолчанию.

String args1[] = new String[10]; 
Rengine rengine = new Rengine(args, false, null); 
+0

Очень ценный! – Koekje

0

Вы должны установить переменную окружения R_HOME в вашем JVM environment. Установите его в свою среду, переменная не будет работать, JVM - NOT. Просто вычислил это сам.

Смежные вопросы