9

我正在尝试XLConnect在 R 中使用库。如果我执行

library(XLConnect)

我收到以下错误消息:

JAVA_HOME cannot be determined from the Registry

为了解决这个问题,我首先设置了JAVA_HOME变量:

Sys.setenv(JAVA_HOME='C:/Program Files (x86)/Java/jre1.8.0_65')
library(XLConnect)

看起来它可以帮助我走得更远,但后来我遇到了另一个问题:

unable to load shared object 'C:/Program Files/R/R-3.2.2/library/rJava/libs/x64/rJava.dll'

它想知道为什么 R 无法加载rJava.dll。至少这个文件位于 R 搜索它的文件夹中:

C:\Program Files\R\R-3.2.2\library\rJava\libs\x64

添加

请注意,该rJava.dll文件存在并且位于 R 正在搜索它的位置。我想问题在于 32 位和 64 位版本之间的不兼容。我假设因为 R 抱怨:

% 1 is not a valid Win32 application

好吧,为什么 R 期望它Win32 application`? First, my OS is 64bit, second my Java is also for the 64bit and finally, the `rJava.dll` object is located in the folder with在名称中是 x64`(所以,我假设它也是 64 位版本)。

4

2 回答 2

4

我面临同样的问题。请找到 jvm.dll 应该在(您的 JRE 版本可能不同)

C:\Program Files (x86)\Java\jre1.8.0_65\bin\client

或者

C:\Program Files (x86)\Java\jre1.8.0_65\bin\server

将此路径添加到您的 Windows 系统路径中,您就可以开始了。但请记住,jre 和 R 的版本应该是一致的,如果您的 java 是Program Files64 位的,那么64 bit R 如果它是Program Files (x86)32 位的则使用32 bit R

就像我的情况一样,它在 64 位中显示错误在此处输入图像描述

但在 32 位下完美运行 在此处输入图像描述

于 2015-11-18T19:37:40.507 回答
3

您确实使用/了而不是\.

Sys.setenv(JAVA_HOME='C:\\Program Files (x86)\\Java\\jre1.8.0_65') 
library(XLConnect)

我正在使用 UNIX。因此我不能自己测试它,但你的路径也可能是错误的。

根据这篇文章,您可以使用以下方法进行搜索:

find.java <- function() {
    for (root in c("HLM", "HCU")) for (key in c("Software\\JavaSoft\\Java Runtime Environment", 
        "Software\\JavaSoft\\Java Development Kit")) {
        hive <- try(utils::readRegistry(key, root, 2), 
          silent = TRUE)
        if (!inherits(hive, "try-error")) 
          return(hive)
    }
    hive
}

归功于@nograpes 的功能和这篇文章帮助我给你答案。

于 2015-11-20T00:30:03.793 回答