在 Win764位上使用带 R 的 rJava 包

我试图安装 rJava的计算机赢764位。当我运行

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'

我已经安装了 JavaJRE (同时尝试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)"
176927 次浏览

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

> .Machine$sizeof.pointer
[1] 8

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

编辑: 如果包中有二进制文件,那么它们在不同的目录中。具体细节将取决于操作系统。请注意,在我的 MacOS 系统上... rJava/libs/... ‘文件夹有3个子目录: i386、 ppc 和 x86 _ 64,当它试图在 ...rJava/libs/x64/...中找到 dll 时,发生了 LoadLibrary 错误。(PPC 文件显然是没用的行李。)

更新日期(2018年7月) :

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

  • 要在32位 R 中使用 rJava,需要 < em > 适用于 Windowsx86的 Java
  • 要在64位 R 中使用 rJava,需要 < em > 适用于 Windowsx64的 Java
  • 要使用 multi-arch (默认值)构建或检查 R 包,您需要 两个都安装 Java For Windows x64用于 Windowsx86的 Java。在 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')

古老的回答:

(注意: 许多人在其他回答/评论中说要删除 JAVA _ HOME,所以请考虑这一点。我最近没有重新讨论这个问题,以了解是否仍然需要以下所有步骤。)

下面是一些关于如何在 Windows764位上使用 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

无论您的目录在哪里,将该目录添加到您的窗口 PATH 变量。(Windows-> “ PATH”-> “ Edit 環境變量 to for your account”-> PATH-> Edit the value)

您可能已经在 PATH 中使用了 Java。如果是这样,那么您应该在与 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 变化。

安装 rJava0.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/')

注意标点!神秘的。LibPath ()[1] ,”只是告诉 R 在主库目录中安装包。出于某种原因,保留空值不起作用,即使它应该是默认值。

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

  1. 对于 R 和 JDK/JRE,都必须使用 使用相同的32位或64位版本。这样的混合策略是行不通的(至少对我来说)。
  2. 如果你的 使用64位版本确定,你的 不要设置 JAVA _ HOME作为一个环境变量。如果设置了这个变量,则 rJava 将无法工作(至少对我来说)。您可以轻松地检查 R 是否设置了 JAVA _ HOME

    Sys.getenv("JAVA_HOME")
    

If you need to have JAVA_HOME set (e.g. you need it for maven or something else), you could deactivate it within your R-session with the following code before loading rJava:

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

在大多数情况下,这应该可以解决问题。此外,这将修复问题使用 rJava 包在 Win764位与 R,也。我借用了从 RJava 包安装失败中取消设置环境变量的想法。

对我来说,设定 JAVA _ HOME 完成了这个任务(而不是取消设置,就像这里给出的另一个答案):

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

或者在 R:

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

但可能是 最佳解决方案(因为 rJava 0.9-4)在 R 中覆盖了 Windows JAVA _ HOME 设置:

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

我在确定遇到这个问题时安装的 Java 包时遇到了一些麻烦,因为以前的答案并不适合我。为了解决这个问题,我输入:

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

然后点击 tab,两个建议的目录是“ 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 可用于我的浏览器,但64位 JRE 的 R 和 rJava。32位 JRE 安装在默认位置。经过一些实验,我发现我只需要一个 蜜蜂先生建议就可以让 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 可以找到它需要的东西。

对不起。 我也碰到过同样的问题,发现 rJava期望 JAVA_HOME指向 JRE。如果您已经安装了 JDK,那么您的 JAVA_HOME很可能指向 JDK。我的快速解决方案是:

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

我想这是最新消息。在安装 JDK 之前,我无法安装 rJava (在 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 现行版本(0.9-7于2015年7月29日出版) RJava

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。

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

当真正的解决方案是强制安装程序忘记 i386时,用户可能会在 jvm.dll、 PATH 和 JAVA _ HOME 上浪费大量时间。对 install.package 使用选项。(当使用 drat 库时,这也可以工作。(荣誉归于 Dason)

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

此外,您还可以使用 win 命令修改您的用户路径,如下所示:

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

我在我的 Windows 7 x64机器上用 翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳解决了这个问题。我是通过首先卸载所有 Java 应用程序和 然后安装一个新的 Java 版本来实现这一目标的。(后来我的 指向 Java 路径的 R3.4.3 x86 _ 64-w64-mingw32,只是提到虽然我不认为这是真正的问题。)今天只剩下 Java 8 Update 161(64位)8.0.1610.12了。在这之后,install.packages("rJava"); library(rJava)确实工作得很完美。

  1. https://java.com/en/download/windows-64bit.jsp下载用于64位窗口的 Java 安装它
  2. https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载适用于64位 windows 的 JDK 安装它
  3. 然后右键单击桌面属性中的“ This PC”图标高级系统设置高级环境变量在系统变量中选择路径单击编辑单击新复制粘贴路径“ C: Program Files Java jdk1.8.0 _ 201 bin”和“ C: Program Files Java jre1.8.0 _ 201 bin”(没有引号) OK OK OK OK

注意: jdk1.8.0 _ 201和 jre1.8.0 _ 201将根据 JDK 和 Java 的版本进行更改

  1. 在“环境变量”窗口中转到“用户变量”,用户单击“新建放置变量名称”作为“ JAVA _ HOME”,变量值作为“ C: Program Files JAVA jdk1.8.0 _ 201 bin”按 OK

要检查安装,打开 CMD 类型 javac 按回车键和类型 java 按回车键它将显示enter image description here

在 RStudio 中运行

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

注意: jdk1.8.0 _ 201将根据 JDK 的版本更改

现在您可以安装和加载 rJava 包,没有任何问题。

这是更新(2018年7月)的后续工作。我在64位 Windows10上,但是我设置从源代码为32位和64位 Rtools 构建 r 包。我的64位 jdk 是 jdk-11.0.2。如果可以的话,我会在 RStudio 做所有的事情。截至2019年3月,rjava 使用 < = jdk11进行测试,请参阅 Github 第157期

  • 每次更新(2018年7月) ,通过@Jeroen 将 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 脚本控制台不喜欢双逗号... ... 但它工作!

这么多的答案,然而,没什么为我工作-非常令人失望和沮丧。
我时不时会碰到这个问题,在谷歌上浪费时间。
所以这里是什么做工作为我,我在 Windows 10,与一切完全更新。

  1. 我在这里下载 JDKJRE 8u301,在这个写作的最新版本。
    Oracle 最新 Java 下载链接
    注意,我必须创建一个帐户或登录到我的帐户-没有花费时间,是 自由,没有什么可担心的。
  2. 我先安装了 JRE,然后安装了 JDK,使用的是上一步刚刚下载的 exe
  3. Rstudio(或者在 R)中,我运行 Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jdk1.8.0_301')
  4. 运行 install.packages("rJava")导致了所需的 DONE (rJava)(当然,我假设您也安装了 Rtools,这是不言而喻的...)

非常简单。 用正确的步骤,花了我3分钟。