在R7上使用Win7 64位上的rJava软件包

我正在试图在Win 7 64位电脑上安装rJava 。 当我跑步

 install.packages("rJava") 

一切似乎都很好:

 Installing package(s) into 'C:/Users/djq/Documents/R/win-library/2.13' (as 'lib' is unspecified) trying URL 'http://software.rc.fas.harvard.edu/mirrors/R/bin/windows/contrib/2.13/rJava_0.9-1.zip' Content type 'application/zip' length 654936 bytes (639 Kb) opened URL downloaded 639 Kb package 'rJava' successfully unpacked and MD5 sums checked The downloaded packages are in C:\TEMP\RtmpW2eAUw\downloaded_packages 

但是当我试图加载库library(rJava)我得到以下错误:

 Error : .onLoad failed in loadNamespace() for 'rJava', details: call: inDL(x, as.logical(local), as.logical(now), ...) error: unable to load shared object 'C:/Users/me/Documents/R/win-library/2.13/rJava/libs/x64/rJava.dll': LoadLibrary failure: %1 is not a valid Win32 application. Error: package/namespace load failed for 'rJava' 

我已经安装了Java JRE(尝试32和64位版本)和JDK(同时使用32和64位)。 我的R版本是R version 2.13.1 (2011-07-08) ,我正在使用RStudio。

如果我尝试使用32位R,我可以加载rJava罚款。 问题只是rJava不能在R 64位运行? 我怎么知道一个软件包是32而不是64?


编辑:刚刚张贴R.version()

 > R.Version() $platform [1] "x86_64-pc-mingw32" $arch [1] "x86_64" $os [1] "mingw32" $system [1] "x86_64, mingw32" $status [1] "" $major [1] "2" $minor [1] "13.1" $year [1] "2011" $month [1] "07" $day [1] "08" $`svn rev` [1] "56322" $language [1] "R" $version.string [1] "R version 2.13.1 (2011-07-08)" 

(注意:其他答案/评论中的很多人都说要删除JAVA_HOME,所以考虑一下,最近我还没有重新讨论过这个问题,知道下面的所有步骤是否仍然有必要。)

以下是关于如何在Windows 7 64位上使用R + rJava进行启动和运行的一些快速build议。 有几种可能性,但大多数有致命的缺陷。 这是什么对我有用:

将jvm.dll添加到您的PATH

rJava,R – Java桥,将需要jvm.dll,但R将无法find该DLL。 它驻留在一个文件夹中

 C:\Program Files\Java\jdk1.6.0_25\jre\bin\server 

要么

 C:\Program Files\Java\jre6\jre\bin\client 

无论你在哪里,将该目录添加到您的Windows PATHvariables。 (Windows – >“path” – >“编辑您的帐户的环境variables” – > PATH – >编辑值。)

您的PATH上可能已经有了Java。 如果是这样的话,你应该find与已经在你的PATH中相同的Java“home”目录下的client / server目录。

为了安全起见,确保你的体系结构是匹配的。如果你在Program Files有Java,它是64位的,所以你应该运行R64。 如果Program Files (x86)有Java,那是32位,所以你使用普通的32位R.

从Windows菜单重新启动R

如果R正在运行,退出。

从开始菜单中,启动R / RGUI,RStudio。 这是非常重要的,使R拿起你的path变化。

安装rJava 0.9.2。

较早的版本不起作用! 镜子是不是最新的,所以请访问www.rforge.net:http://www.rforge.net/rJava/files/。; 注意那里的build议

 “Please use `install.packages('rJava',,'http://www.rforge.net/')` to install.” 

这几乎是正确的。 这实际上起作用:

install.packages('rJava', .libPaths()[1], 'http://www.rforge.net/')

注意标点符号! 神秘的“.libPaths()[1]”只是告诉R安装包在主库目录中。 由于某些原因,将值留空不起作用,尽pipe它应该是默认值。

让rJava工作很大程度上取决于您的计算机configuration:

  1. R和JDK / JRE都必须使用相同的 32位或64位版本。 这种混合将永远不会工作(至less对我来说)。
  2. 如果您使用64位版本,请确保您不要将JAVA_HOME设置为环境variables。 如果设置了这个variables,rJava将无法工作(至less对我而言)。 你可以很容易地在R内检查JAVA_HOME是否被设置

     Sys.getenv("JAVA_HOME") 

如果您需要设置JAVA_HOME(例如,您需要将其用于maven或其他),则可以在加载rJava之前使用以下代码在R会话中停用它:

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

这应该在大多数情况下做到这一点。 此外,这将解决问题使用Win7 64位r上的rJava包也是如此。 我从R:rJava软件包安装失败中借用了取消环境variables的设想。

对于我来说, 设置 JAVA_HOME做了诀窍(而不是像这里给出的另一个答案那样不设置)。 无论是在Windows中:

 set JAVA_HOME="C:\Program Files\Java\jre7\" 

或里面R:

 Sys.setenv(JAVA_HOME="C:\\Program Files\\Java\\jre7\\") 

但是,可能最好的解决scheme (因为rJava 0.9-4)在Windows的JAVA_HOME设置内重写:

 options(java.home="C:\\Program Files\\Java\\jre7\\") library(rJava) 

最后一个问题有一个简单的答案:

 > .Machine$sizeof.pointer [1] 8 

这意味着我正在运行R64。 如果我正在运行32位R,它将返回4.仅仅因为你正在运行一个64位操作系统并不意味着你将运行64位R,从错误信息看来,你不是。

编辑:如果包有二进制文件,那么他们在不同的目录。 具体将取决于操作系统。 注意当你试图在...rJava/libs/x64/...finddll的时候,你的LoadLibrary错误发生了...rJava/libs/x64/...在我的MacOS系统上… rJava / libs / …`文件夹有3个子目录:i386,ppc和x86_64。 (ppc文件显然是无用的行李。)

对不起,坏了。 我也遇到了同样的问题,发现rJava期望JAVA_HOME指向JRE。 如果您安装了JDK,则很可能您的JAVA_HOME指向JDK。 我的快速解决scheme

 Sys.setenv(JAVA_HOME=paste(Sys.getenv("JAVA_HOME"), "jre", sep="\\")) 

我和rJava有一个相关的问题。 它会加载,但一个依赖于它的包,不会加载。

用户可能会花费大量的时间用jvm.dll和PATH和JAVA_HOME,当真正的解决办法是强迫安装程序忘记i386。 使用install.packages选项。 (这也适用于使用drat库的时候(信贷交给Dason)

 install.packages("SqlRender",INSTALL_opts="--no-multiarch") 

另外,你可以像这样使用win命令修改你的用户path:

 setx PATH "C:\Program Files\Java\jre1.8.0_102\bin\server;%PATH%" 

我遇到了一些麻烦,确定当我遇到这个问题时安装的Java包,因为以前的答案不完全适合我。 为了整理,我input:

 Sys.setenv(JAVA_HOME="C:/Program Files/Java/ 

然后点击标签,两个build议的目录是“jre1.8.0_31 /”和“jre7 /”

Jre7没有解决我的问题,但jre1.8.0_31 /没有。 最终答案正在运行(库(rJava)之前):

 Sys.setenv(JAVA_HOME="C:/Program Files/Java/jre1.8.0_31/") 

我正在使用64位Windows 8.1希望这可以帮助别人。

更新:

检查您的版本以确定X应该是什么(自从这篇文章以来,我已经多次更改):

 Sys.setenv(JAVA_HOME="C:/Program Files/Java/jre1.8.0_x/") 

我需要为我的浏览器提供32位JRE,但是R和rJava需要64位JRE。 32位JRE安装在默认位置。 经过一番实验,我发现我只需要misterbee的一个build议就可以让rJava( 0.9-6版本)为我工作。 我所做的只是将path添加到我的64位Java安装:

 C:\apps\Java\jre\bin\server\jvm.dll 

到我的path环境variables的顶部(您的path可能会不同),并删除我的JAVA_HOMEbuild议user2161065 。 我把这个放在了入口的前面

 C:\ProgramData\Oracle\Java\javapath 

Oracle安装程序将其插入path的顶部,并指向32位JRE的一些符号链接。 通过添加条目到64位jvm.dll,看起来像rJava可以find它所需要的。

我认为这是一个更新。 我无法安装rJava(在Windows上),直到我安装了JDK,因为没有findJavac,并且在Windows命令提示符下javac不工作 。 我得到的消息是

 'javac' is not recognized as an internal or external command, operable program or batch file. 

JDK包含JRE,根据https://cran.r-project.org/web/packages/rJava/index.html rJava的当前版本(0.9-7发布,2015年7月29日)

 SystemRequirements: Java JDK 1.2 or higher (for JRI/REngine JDK 1.4 or higher), GNU make 

所以,你是这样的:如果rJava不能安装,因为它找不到javac,并且你安装了JRE,那么试试JDK。 另外,确保JAVA_HOME指向JDK而不是JRE。