156

我正在尝试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)"
4

13 回答 13

160

更新(2018 年 7 月):

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

  • 要在 32 位 R 中使用 rJava,您需要Java for Windows x86
  • 要在 64 位 R 中使用 rJava,您需要Java for Windows x64
  • 要使用多架构(默认)构建或检查 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')

老答案:

(注意:其他答案/评论中的许多人都说要删除 JAVA_HOME,所以请考虑一下。我最近没有重新审视这个问题,以了解以下所有步骤是否仍然必要。)

这里有一些关于如何在 Windows 7 64 位上启动和运行 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 ->“路径”->“为您的帐户编辑环境变量”-> PATH -> 编辑值。)

您的 PATH 中可能已经有 Java。如果是这样,您应该在与 PATH 中已有的 Java“主”目录相同的 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 将包安装在主库目录中。出于某种原因,将值留空是行不通的,即使它应该是默认值。

于 2011-09-29T23:26:29.140 回答
116

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

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

    Sys.getenv("JAVA_HOME")
    

如果您需要设置 JAVA_HOME(例如,您需要它用于 maven 或其他东西),您可以在加载 rJava 之前使用以下代码在您的 R-session 中停用它:

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

在大多数情况下,这应该可以解决问题。此外,这也将解决在带有 R 的 Win7 64 位上使用 rJava 包的问题。我借用了从R 中取消设置环境变量的想法: rJava package install failed

于 2013-04-14T11:05:01.060 回答
32

对我来说,设置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 开始)可能是在 R 中完全覆盖 Windows JAVA_HOME 设置:

options(java.home="C:\\Program Files\\Java\\jre7\\")
library(rJava)
于 2013-10-16T21:07:26.993 回答
8

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

> .Machine$sizeof.pointer
[1] 8

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

编辑:如果包有二进制文件,那么它们位于不同的目录中。细节将取决于操作系统。请注意,当它尝试在我的 MacOS 系统中查找 dll 时发生 LoadLibrary 错误...rJava/libs/x64/... ,...rJava/libs/...` 文件夹有 3 个子目录:i386、ppc 和 x86_64。(ppc 文件显然是无用的包袱。)

于 2011-08-11T03:40:41.290 回答
5

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

Sys.setenv(JAVA_HOME=paste(Sys.getenv("JAVA_HOME"), "jre", sep="\\"))
于 2015-07-20T13:03:06.927 回答
4

我有一个与 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%"
于 2016-07-07T20:01:42.137 回答
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/")
于 2015-03-04T20:17:47.473 回答
1
  1. 从https://java.com/en/download/windows-64bit.jsp为 64 位 windows下载 Java \安装
  2. 从https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载适用于 64 位 Windows 的Java 开发工具包\安装它
  3. 然后右键单击桌面\属性\高级系统设置\高级\环境变量\系统变量下的“这台电脑”图标选择路径\单击编辑\单击新建\复制并粘贴路径“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. 在 Environment Variables 窗口中,转到 User variables for User\单击 New\Put 变量名称为“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 包。

于 2019-01-16T09:40:53.293 回答
0

我的浏览器需要 32 位 JRE,而 R 和 rJava 需要 64 位 JRE。32 位 JRE 安装在默认位置。经过一些实验,我发现我只需要miserbee 的一项建议就可以让 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 可以找到它需要的内容。

于 2015-07-14T18:31:50.903 回答
0

我认为这是一个更新。在安装 JDK 之前,我无法安装 rJava(在 Windows 上),因为 找不到 Javac 并且 javac not working in windows command prompt。我收到的信息是

'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。

于 2015-09-15T23:36:18.443 回答
0

我通过从我的 windows 7 x64 机器上卸载明显冗余的 Java 软件解决了这个问题。我通过首先卸载所有 Java 应用程序然后安装新的 Java 版本来实现这一点。(后来我将 R 3.4.3 x86_64-w64-mingw32 指向 Java 路径,只是提一下,尽管我认为这不是真正的问题。)今天只剩下 Java 8 Update 161 (64-bit) 8.0.1610.12然后。在此之后,install.packages("rJava"); library(rJava)确实完美地工作。

于 2018-02-22T07:53:31.097 回答
0

这是更新(2018 年 7 月)的后续行动。我在 64 位 Windows 10 上,但设置为使用 Rtools 从源代码为 32 位和 64 位构建 r 包。我的 64 位 jdk 是 jdk-11.0.2。如果可以,我会在 RStudio 中做所有事情。截至 2019 年 3 月,rjava 已使用 <=jdk11 进行测试,请参阅github issue #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 脚本控制台不喜欢双逗号......但它有效!

于 2019-03-28T13:20:18.773 回答
0

这么多答案,但对我没有任何帮助——非常令人失望和沮丧。
时不时我会遇到这个问题并在谷歌上浪费时间。
所以这就是对我有用的东西,我在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 分钟。

于 2021-09-26T17:33:57.093 回答