Win7 x64 载入rJava报错

在运行用XLConnect包操控Excel表格的第一步

1
library(XLConnect)

运行时这里R报错,这是由于XLConnect依赖rJava,而rJava模块载入出错导致XLConnect载入停止。

我的机器配置:

  • OS:Win7 64bit
  • JDK:java version “1.7.0_40” 64bit,在cmd窗口输入java -version
  • R version:x86_64-w64-mingw32/x64 (64-bit) 刚刚进入R就会显示,或者输入R.version

网上找的解决方案如R安装rJava
楼主说改用32位即可,当然有个前提那就是它本身有安装32位,这不是废话嘛(⊙_⊙),但是此法对我来说是无效的。最后从这里Using the rJava package on Win7 64 bit with R找到了答案

具体步骤如下:

  1. 首先你得保证:你运行的系统版本和你运行的R版本,Java版本是一致的,都为64位或者32位。
  2. 添加jvm.dll至PATH中。rJava作为Java的R的通道,需要jvm.dll这个动态链接库,但是R常常在找dll文件中出现问题。jvm.dll在%JAVA_HOME%\jre\bin\server
    或者%JRE_HOME%\bin\server,添加此目录至你的PATH变量即可。

我本来想偷懒的直接将jvm.dll添加到%JAVA%\bin目录,但是虽然rJava表面上是启动成功了,但是载入XLConnect又开始莫名罢工了,每次RStudio总是崩溃状态,RGui也是。猜测可能调用了其他的文件,真所谓聪明反被聪明误:-(

这里还可能有一个问题,报错原因是JAVA_HOME cannot be determined from the Registry
解决方案是人工指定Java目录。

1
2
3
Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre7') # for 64-bit version
Sys.setenv(JAVA_HOME='C:\\Program Files (x86)\\Java\\jre7') # for 32-bit version
library(rJava)

可能大家也会遇到,也一并留着放这里。
HOW TO LOAD THE {RJAVA} PACKAGE AFTER THE ERROR “JAVA_HOME CANNOT BE DETERMINED FROM THE REGISTRY”

  1. 重新启动R,以确保Path生效
  2. 最后作者建议再重新安装rJava
    1
    install.packages('rJava')

其他的解决方案:
一个小trick,如果你是用64位机器的话,请不要设置JAVA_HOME选项,否则rJava会遭遇莫名其妙的错误。

1
2
3
if (Sys.getenv("JAVA_HOME")!="")
Sys.setenv(JAVA_HOME="")
library(rJava)

还学到一些其他的技巧,如何在R中查看系统版本

1
2
.Machine$sizeof.pointer
#如果是8,为64位OS;如果为4,则为32位系统

完。