我最近完成了(Windows)系统更新,现在我不能再使用R运行系统命令。我已经尝试重新安装R和所有使用过的软件包,但这并没有解决我的问题。问题。重新启动也没有解决问题。
我刚刚发现虽然system()和system2()命令不再起作用,但shell()命令确实有效。
> system('ECHO "test"')
Warning message:
running command 'ECHO "test"' had status 127
> system2('ECHO "test"')
Warning message:
running command 'ECHO \"test\"' had status 127
> shell('ECHO "test"')
"test"
文档描述了shell()应该是一个简单的用户友好的系统()包装器。因此,我不明白为什么shell()有效,但系统没有。
使用另一台系统()功能仍然有效的计算机,我已检查过差异。 Windows版本,R版本和软件包版本相同(至少根据干净会话中的sessionInfo())。与我可以使用的system()相比,Shell()指定了一些额外的参数:
因此,我只能得出结论,shell()在system()之上做某事,以某种方式改变它的行为。此行为未在文档中指定,也不能通过任何参数访问。
在哪里可以找到两者之间的其他差异,以找到此错误的来源?
答案 0 :(得分:4)
首先我试过,如果我可以重现这个(在Win10上):
system('ECHO "test"')
#Warning message:
#running command 'ECHO "test"' had status 127
shell('ECHO "test"')
#"test"
然后我查看了shell
的源代码,发现它在将命令传递给system
之前更改了命令。在我的系统上:
system('C:\\WINDOWS\\system32\\cmd.exe /c ECHO "test"')
#"test"
另请参阅Sys.getenv("COMSPEC")
,如果Sys.getenv("R_SHELL")
为空,则会给出shell。请注意,文档指出POSIX标准要求在shell下运行命令。 help("system")
解释说,在类似Unix的操作系统system
上启动shell并推荐shell
(在Windows上)。