在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:
- R和JDK / JRE都必须使用相同的 32位或64位版本。 这种混合将永远不会工作(至less对我来说)。
-
如果您使用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。