我现在多次安装/卸载java jre / jdk,最后安装了旧版本1.6.0_17,现在位于“C:\ Program Files \ Java \ jre6 \ bin”。毕竟如果我在R中调用'java -version',我可以看到R在旧路径上寻找Java,现在是错误的。问题是:为什么R在错误的路径上寻找Java,即使Windows路径设置正确?据我所知,在windows路径中没有双重命令,从那时起我重新启动了R以及Windows。 R从哪条路走错了路径?
在Windows shell上:
$>set
[..]
OS=Windows_NT
Path=C:\Program Files\Java\jre6\bin;
[..]
$> java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)
:
$>system("java -version")
Error: could not open `C:\Program Files (x86)\Java\jre6\lib\i386\jvm.cfg'
答案 0 :(得分:2)
您的问题取决于64/32位版本 您运行32位R,它使用32位命令提示符并找到32位Java。如果你使用64位R,那么它运行64位命令promt和正确的java。
您可以通过运行32位命令promt(this post之后)来检查它:
%windir%\SysWoW64\cmd.exe
。java -version
在我的系统中,它失败了,因为我没有32位java。使用标准的cmd.exe,我得到了正确的路径。
对于可能的解决方案,有两种方法。安装32位R和32位Java或64位R(即officially supported from 2.11 version)和64位Java。在我的系统(64位Windows 7)上,我有两套,所以我得到了32位组合:
> system("java -version")
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
在64位上:
> system("java -version")
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
在64位版本上,您可以使用32位cmd调用32位Java:
shell(
"java -version",
shell = file.path(Sys.getenv("windir"),"SysWoW64/cmd.exe")
)
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
关于Shane的评论我认为问题是R如何获得32位cmd的路径。因为我找不到在32位R上调用64位cmd的方法。
答案 1 :(得分:2)
我到了这个页面试图解决为什么我的JDK报告64位,尽管PATH和JAVA_HOME指向32位。
我甚至不知道R是什么,但这篇文章可能有所帮助(它为我解决了)
http://www.tipandtrick.net/2008/how-to-open-and-run-32-bit-command-prompt-in-64-bit-x64-windows/
简而言之,不要从'cmd'运行'%windir%\ SysWoW64 \ cmd.exe'。 或者,将JDK放在路径的前端而不是末尾(我不认为这是理想的)。
答案 2 :(得分:1)
你假设R正在查看Windows路径,但代码告诉你它不是。因此,请检查您的假设:R正在其他地方获得路径。
如果我在Windows机器上打开命令shell并输入“java -version”,我会得到:
C:\>java -version
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)
如果我检查机器上的PATH,我会(为清晰起见而编辑):
C:\>set path
Path=;C:\JDKs\jdk1.6.0_13\bin;
如果我打开R版本2.8.1并运行system(“java -version”),我会得到:
> system("java -version")
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)
>
所以,就像我说的那样,R没有使用我的路径来查找java.exe。它正在使用其他东西。
答案 3 :(得分:1)
您可能还需要检查注册表,R可能有自己的设置。您也可以启动regedit并搜索它正在启动的二进制路径。