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

在Windows上设置Java R接口(JRI),java,r,rjava,jri,Java,R,Rjava,Jri,我遵循了网络上的指南,并查看了有关stackoverflow的问题,但我仍然无法在Windows上设置JRI 以下是我采取的步骤: 1) 安装R 2) 在R中执行install.packages(“rJava”)以安装rJava 3) 创建一个带有值的R\u HOME系统变量C:\Program Files\R\R-3.1.2 4) 将以下内容添加到我的PATH变量中:C:\ProgramFiles\R\R-3.1.2\bin\x64;C:\Users\USERNAME\Documents\R\

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

以下是我采取的步骤:

1) 安装R

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

3) 创建一个带有值的
R\u HOME
系统变量
C:\Program Files\R\R-3.1.2

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

5) 将JRI.jar(位于
C:\Users\USERNAME\Documents\R\win library\3.1\rJava\JRI
)添加为IntelliJ中的依赖项

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

7) 启动R并执行
库(“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.
#
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.<clinit>(Rengine.java:19)
    at com.coagsm.cs.fyp.Test.<clinit>(Test.java:11)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:260)
如果删除VM选项,因此未指定java.library.path,则会出现以下错误:

#
# 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.
#
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.<clinit>(Rengine.java:19)
    at com.coagsm.cs.fyp.Test.<clinit>(Test.java:11)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:260)
找不到JRI本机库!
请确保JRI本机库位于java.library.path中列出的目录中。
java.lang.UnsatisfiedLinkError:java.library.path中没有jri
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865)
位于java.lang.Runtime.loadLibrary0(Runtime.java:870)
位于java.lang.System.loadLibrary(System.java:1119)
位于org.rosuda.JRI.Rengine(Rengine.java:19)
在com.coagsm.cs.fyp.Test.(Test.java:11)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:260)

您如何实例化Rengine

应该是这样的:

Rengine-Rengine=new-Rengine(args,false,null)

其中,args可能来自main方法

让我知道这是否有效

我最新(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_路径设置为enclude JRI 或者设置-Djava.library.path例如

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