将WinJava 64位上的rJava包与R一起使用


149

我正在尝试rJava在具有Win 7 64位的计算机上安装。当我跑步

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)"

您可以将结果粘贴R.Version()到您的问题吗?我刚刚rJava使用您在问题中描述的确切方法安装了64位版本。我的猜测是您的R版本是32位。
Andrie

请分享您的回答,以及如何解决。
bigData 2013年

1
在此处添加评论,因为它可以帮助某人完成整个解决方案列表。如果出现上述错误,请检查Java是否在Program Files或中Program Files (x86)。按照接受的答案说,向Windows添加路径。如果为Program Files (x86),则表示您使用的是32位版本,请访问以下链接:sites.google.com/site/rforfishandwildlifegrads/home/week_2/…
Divi

Answers:


154

更新(2018年7月):

最新的CRAN版本的rJava会jvm.dll自动找到,而无需手动设置PATHJAVA_HOME。但是请注意:

  • 要在32位R中使用rJava,Windows x86需要Java
  • 要在64位R中使用rJava,Windows x64需要Java
  • 要使用多体系结构(默认)构建或检查R软件包,您需要同时 安装 Java For Windows x64Java for Windows x86。在Win 64上,前者安装在其中C:\Program files\Java\,后者安装在其中,C:\Program Files (x86)\Java\因此它们不会冲突。

从Java版本9开始,已不再支持x86(win32)。因此,最新的有效多体系结构设置是安装jdk-8u172-windows-i586.exejdk-8u172-windows-x64.exe,然后安装来自CRAN的二进制软件包:

install.packages("rJava")

来自CRAN的二进制软件包应该自己在jvm上使用。只限专家:要从源代码构建rJava,您需要--merge-multiarch标记:

install.packages('rJava', type = 'source', INSTALL_opts='--merge-multiarch')

旧的anwser:

(注意:在其他答案/评论中,许多人都说要删除JAVA_HOME,因此请考虑一下。我最近没有再研究此问题,以了解是否仍然需要执行以下所有步骤。)

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

将jvm.dll添加到您的PATH

RJava是R <-> Java桥,将需要jvm.dll,但是R将很难找到该DLL。它位于类似的文件夹中

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

要么

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

无论您在哪里,都将该目录添加到Windows PATH变量中。(Windows->“路径”->“将环境变量添加到您的帐户中”->“路径”->“编辑值”。)

您的路径上可能已经有Java。如果是这样,您应该在PATH中已经存在的Java“ home”目录中找到该client / server目录。

为了安全起见,请确保您的体系结构匹配。如果您的Java中包含Java Program Files,它是64位的,因此您应该运行R64。如果您在中有Java Program Files (x86),则为32位,因此您将使用普通的32位R。

从Windows菜单重新启动R

如果R正在运行,请退出。

从“开始”菜单中,启动R / RGUI,RStudio。这对于使R拾取您的PATH更改非常重要。

安装rJava 0.9.2。

早期版本不起作用!镜像不是最新的,因此请访问www.rforge.net上的源代码:http ://www.rforge.net/rJava/files/ 。注意那里的建议

“Please use

`install.packages('rJava',,'http://www.rforge.net/')`

to install.”

那几乎是正确的。这实际上有效:

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

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


4
您可以这样做,而不是将第二个参数留空install.packages('rJava', repos='http://www.rforge.net/')
肯·威廉姆斯

2
正如@ user2161065的答案所指出的,加载rJava需要删除JAVA_HOME变量
David LeBauer,

1
尽管可能需要所有这些,但是即使这样做,我也必须按照@ user2161065
ajkl 2013年

3
+1添加...\jre\bin\server到路径为我修复了它
mchen 2014年

6
在哪里可以找到“ Windows PATH”变量?
Shreyes

114

使rJava正常工作在很大程度上取决于您的计算机配置:

  1. 您必须为R和JDK / JRE 使用相同的 32位或64位版本。混合使用将永远无法工作(至少对我而言)。
  2. 如果使用64位版本,请确保不要将JAVA_HOME设置为环境变量。如果设置了此变量,则rJava不管出于什么原因(至少对我而言)都将不起作用。您可以轻松地在R中检查JAVA_HOME是否设置为

    Sys.getenv("JAVA_HOME")

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

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

在大多数情况下,这应该可以解决问题。此外,这还将解决在R7上Win64 64位上使用rJava包的问题。我借用了从R中取消设置环境变量的想法:rJava软件包安装失败


20
在我摆脱JAVA_HOME之前,以前的解决方案不起作用。这是关键。
13年

15
这个JAVA_HOME问题应作为错误报告给rJava。
学徒队

2
这确实为我解决了问题:if(Sys.getenv(“ JAVA_HOME”)!=“”)Sys.setenv(JAVA_HOME =“”)库(rJava)感谢@ user2161065
ajkl 2013年

添加该脚本以删除JAVA_HOME var对我有用!
理查德

1
此解决方案也适用于依赖rJava的XLConnect和XLConnectJars之类的软件包。(我正在写这个明显的评论,以便搜索引擎可以比我遇到的麻烦更容易在本页上进行搜索。)
Tripartio

31

对我来说,设置 JAVA_HOME可以解决问题(而不是取消设置,如此处给出的另一个答案)。在Windows中:

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

或在R中:

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

但是最好的解决方案(自rJava 0.9-4起)可能是在Windows JAVA_HOME设置中完全覆盖R:

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

2
+1覆盖JAVA_HOME env变量并在R中设置
。– carnust

我的JAVA_HOME设置为JDK文件夹(我也进行Java开发),而rJava没有。我使用了您的最后一个修复程序(选项),因为我不想弄乱一个运行良好的Java开发环境。谢谢!
chaslewis 2014年

1
options(java.home="my\\path\\to\\jre")工作,一切都失败了,包括设置环境PATH
Daniel Krizian

这为我工作:options(java.home="C:\\Program Files\\Java\\jdk1.8.0_144\\jre")。如果您有jdk1.8。
saubhik

使用Adopt Open JDK,该最终建议对我有用。所有其他流行的解决方案均失败。
奥拉·卡斯特,

7

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

> .Machine$sizeof.pointer
[1] 8

表示我正在运行R64。如果我正在运行32位R,它将返回4。仅仅因为您正在运行64位OS,并不意味着您将在运行64位R,并且从错误消息看来,您不是。

编辑:如果程序包具有二进制文件,则它们位于单独的目录中。具体情况取决于操作系统。请注意,当您尝试...rJava/libs/x64/... 在我的MacOS系统上的... rJava / libs / ...`文件夹中找到dll时,出现LoadLibrary错误,该文件夹包含3个子目录:i386,ppc和x86_64。(ppc文件显然是没用的包.。)


我的RStudio安装指向64位R。将其更改为32位时,可以导入rJava软件包。这就是为什么我对错误消息如此困惑,因为它似乎与所发生的事情完全相反。
djq 2011年

4

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

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

3

遇到此问题时,我在确定已安装的Java软件包时遇到了一些麻烦,因为先前的答案对我而言并不完全有效。为了解决这个问题,我输入了:

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

然后点击选项卡,两个建议的目录是“ 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/")

3

我有一个与rJava相关的问题。它会加载,但是依赖它的程序包将不会加载。

当真正的解决方法是迫使安装程序忘记i386时,用户可能会花费很多时间使用jvm.dll和PATH和JAVA_HOME。使用install.packages选项。(这在使用drat库时也有效。(贷记给Dason)

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

同样,您可以使用win命令修改用户路径,如下所示:

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

0

我需要为浏览器提供32位JRE,但为R和rJava提供64位JRE。32位JRE安装在默认位置。经过一些试验,我发现我只需要misterbee的建议之一就可以使rJava(版本0.9-6)对我有用。我所做的就是将路径添加到我的64位Java安装中:

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

到我的路径环境变量的顶部(您的路径可能会有所不同),并按照user2161065的建议删除我的JAVA_HOME 。我把这个放在条目的前面

C:\ProgramData\Oracle\Java\javapath

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


0

我认为这是一个更新。在未安装JDK之前,我无法安装rJava(在Windows上),因为 找不到Javacjavac在Windows命令提示符下不起作用。我收到的消息是

'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 的当前版本(2015年7月29日发布于0.9-7)

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。


我注意到这基本上与@friendzis所说的相反。
woodvi 2015年

rJava开发人员可以解决此问题

0

我通过从Windows 7 x64计算机上卸载显然冗余的Java软件来解决了该问题。我通过首先卸载所有Java应用程序,然后安装新的Java版本来实现这一点。(稍后我将R 3.4.3 x86_64-w64-mingw32指向Java路径,只是要提一下,尽管我认为这不是真正的问题。)今天只剩下Java 8 Update 161(64位)8.0.10610.12。然后。在此之后,install.packages("rJava"); library(rJava)做得很好。


0

这是更新(2018年7月)的后续措施。我在64位Windows 10上,但设置为使用Rtools从源代码为32位和64位构建r软件包。我的64位jdk是jdk-11.0.2。如果可以,我将在RStudio中进行所有操作。截至2019年3月,rjava已通过<= jdk11测试,请参阅github问题#157

  • @Jeroen在每个更新(2018年7月)中将jdks安装到其默认位置。
  • 在R studio中,将JAVA_HOME设置为64位jdk

Sys.setenv(JAVA_HOME="C:/Program Files/Java/jdk-11.0.2")

  • (可选)检查环境变量

Sys.getenv("JAVA_HOME")

  • 根据github页面建议安装软件包

install.packages("rJava",,"http://rforge.net")

仅供参考,rstudio脚本控制台不喜欢双逗号...但是可以使用!


0
  1. https://java.com/zh-cn/download/windows-64bit.jsp下载Java(用于64位Windows)\安装Java
  2. 从64位Windows的https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载Java开发工具\安装它
  3. 然后右键单击桌面\ Properties \ Advanced系统设置\ Advanced \ Environment变量\ Under the System变量中的“ This PC”图标,选择Path \ Click Edit \ Click New \ Copy并粘贴路径“ C:\ Program Files \ Java \ jdk1 .8.0_201 \ bin”和“ C:\ Program Files \ Java \ jre1.8.0_201 \ bin”(不带引号)\ OK \ OK \ OK

注意: jdk1.8.0_201和jre1.8.0_201将根据Java开发套件和Java的版本进行更改。

  1. 在“环境变量”窗口中,转到“用户”的“用户变量” \单击“新建\”,将变量名称命名为“ JAVA_HOME”,将变量值命名为“ C:\ Program Files \ Java \ jdk1.8.0_201 \ bin” \按OK

要检查安装,请打开CMD \ Type javac \ Press Enter,然后键入java \ press enter,它将显示 在此处输入图片说明

在RStudio中运行

Sys.setenv(JAVA_HOME="C:\\Program Files\\Java\\jdk1.8.0_201")

注意: jdk1.8.0_201将根据Java开发套件的版本进行更改

现在,您可以毫无问题地安装和加载rJava软件包。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.