使用Win7 64位上的rJava包和R

时间:2011-08-11 01:37:44

标签: r 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)"

12 个答案:

答案 0 :(得分:145)

更新(2018年7月):

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

  • 要在32位R中使用rJava,您需要Java for Windows x86
  • 要在64位R中使用rJava,您需要Java for Windows x64
  • 要构建或检查具有多拱(默认)的R包,您需要安装 Java For Windows x64 以及 Java 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')

Old anwser:

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

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

将jvm.dll添加到您的路径

r-Java桥接器rJava将需要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上可能已有Java。如果是这样,您应该在与PATH上已有的Java“home”目录中找到客户端/服务器目录。

为了安全起见,请确保您的架构匹配。如果您在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/。注意那里的建议

“Please use

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

to install.”

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

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

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

答案 1 :(得分:107)

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

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

    Sys.getenv("JAVA_HOME")
    
  3. 如果您需要设置JAVA_HOME(例如,您需要maven或其他东西),您可以在加载rJava之前使用以下代码在R会话中停用它:

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

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

答案 2 :(得分:29)

对我来说,设置 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 J:Windows JAVA_HOME设置:

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

答案 3 :(得分:7)

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

> .Machine$sizeof.pointer
[1] 8

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

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

答案 4 :(得分:4)

抱歉,你好。 我也遇到了同样的问题,发现rJava期望JAVA_HOME指向JRE。如果安装了JDK,则很可能是JAVA_HOME指向JDK。我的快速解决方案:

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

答案 5 :(得分: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/")

答案 6 :(得分: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%"

答案 7 :(得分:0)

我的浏览器需要32位JRE,而R和rJava需要64位JRE。 32位JRE安装在默认位置。经过一些实验,我发现我只需要一个 misterbee 建议来让rJava(版本 0.9-6 )为我工作。我所做的只是添加我的64位Java安装的路径:

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

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

C:\ProgramData\Oracle\Java\javapath
Oracle安装程序在路径顶部插入的

指向32位JRE的一些符号链接。通过将条目添加到64位jvm.dll,看起来像rJava可以找到它需要的东西。

答案 8 :(得分:0)

我认为这是一次更新。在安装JDK之前,我无法安装rJava(在Windows上) Javac is not foundjavac 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 当前版本(2015年7月29日发布的0.9-7) of 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。

答案 9 :(得分:0)

我通过Windows 7 x64计算机上的 uninstalling显然冗余的Java软件解决了这个问题。我通过首先卸载所有Java应用程序和然后installing a fresh Java version 来实现这一目标。 (稍后我pointed R 3.4.3 x86_64-w64-mingw32 to the Java path,但我不认为这是真正的问题。)今天只剩下Java 8 Update 161(64位)8.0.1610.12了。在此之后,2018-02-21 23:52:42.480336-0800 RunManager[1878:1120392] 4.8.1 - [Firebase/Analytics][I-ACS035001] Cannot create Value type with unsupported value. The Value has to be NSNumber or NSString. Value: { "2018-02-22 07:46:37 +0000" = "-1"; "2018-02-22 07:46:38 +0000" = "-1"; "2018-02-22 07:46:39 +0000" = "-1"; } 2018-02-21 23:52:42.480414-0800 RunManager[1878:1120392] 4.8.1 - [Firebase/Analytics][I-ACS016000] Event parameter value must be of type NSString or NSNumber. Type: _TtGCs26_SwiftDeferredNSDictionarySSSi_ 确实完美无缺。

答案 10 :(得分:0)

  1. https://java.com/en/download/windows-64bit.jsp下载Java以获得64位Windows \安装
  2. https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载Java开发工具包以用于64位Windows \安装
  3. 然后右键单击桌面\属性\高级系统设置\高级\环境变量\在系统变量下的“此PC”图标,选择路径\单击编辑\单击新建\复制并粘贴路径“ C:\ Program Files \ Java \ jdk1.8.0_201 \ bin”和“ C:\ Program Files \ Java \ jre1.8.0_201 \ bin”(不带引号)\ OK \ OK \ OK

注意:根据Java开发工具包和Java的版本,jdk1.8.0_201和jre1.8.0_201将会更改

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

要检查安装,请打开CMD \ Type javac \ Press Enter,然后键入java \ press enter,它将显示enter image description here

在RStudio中运行

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

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

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

答案 11 :(得分:0)

这是Update(2018年7月)的后续措施。我使用的是64位Windows 10,但设置为使用Rtools从源代码为32位和64位构建r软件包。我的64位jdk是jdk-11.0.2。如果可以,我将在RStudio中进行所有操作。截至2019年3月,rjava已通过<= jdk11测试,请参见github issue #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脚本控制台不喜欢双逗号...但是可以使用!