在Windows上设置Java R接口(JRI)

我已经关注了网络上的指南并查看了有关stackoverflow的问题,但我仍然无法在Windows上设置JRI。

以下是我采取的步骤:

1)安装R.

2)在R中执行install.packages("rJava")以安装rJava

3)创建一个值为C:\Program Files\R\R-3.1.2R_HOME系统变量

4)将以下内容添加到我的PATH变量: C:\Program Files\R\R-3.1.2\bin\x64;C:\Users\USERNAME\Documents\R\win-library\3.1\rJava\jri\x64

5)在IntelliJ中添加了JRI.jar(位于C:\Users\USERNAME\Documents\R\win-library\3.1\rJava\jri )作为依赖项

6)将IntelliJ中的VM选项设置为-Djava.library.path=C:\Users\USERNAME\Documents\R\win-library\3.1\rJava\jri\x64

7)启动R并执行library("rJava")

8)运行我的程序来测试是否所有设置

收到以下错误:

 # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006c726096, pid=5860, tid=6932 # # JRE version: Java(TM) SE Runtime Environment (8.0_31-b13) (build 1.8.0_31-b13) # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.31-b07 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\USERNAME\Documents\Project\hs_err_pid5860.log # # If you would like to submit a bug report, please visit: # http://bugreport.java.com/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # 

如果我删除VM选项,以便未指定java.library.path,则会收到以下错误:

 Cannot find JRI native library! Please make sure that the JRI native library is in a directory listed in java.library.path. java.lang.UnsatisfiedLinkError: no jri in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1119) at org.rosuda.JRI.Rengine.(Rengine.java:19) at com.coagsm.cs.fyp.Test.(Test.java:11) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:260) 

你如何实例化Rengine?

它应该是这样的:

Rengine rengine = new Rengine(args, false, null);

其中,args可以来自你的主要方法。

让我知道这个是否奏效!

最新的(2018年)对我来说是这样的: –

 export R_HOME=$(R RHOME) 

然后编译: –

 String[] enginargs = {"--no-save"}; REngine engine = org.rosuda.REngine.JRI.JRIEngine.createEngine(enginargs, null, false); try { engine.parseAndEval("print(\"Hello from R\");"); } catch(Exception e ) { System.err.println("OOps:-" + e.getMessage()); } finally { engine.close(); } 

然后在运行java时,将LD_LIBRARY_PATH设置为包含JRI或设置-Djava.library.path,例如

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/R/site-library/rJava/jri/ 

要么

 java -Djava.library.path=/usr/local/lib/R/site-library/rJava/jri/ MyMainClass