13

我需要执行外部工具R并处理该工具中发生的错误(如果有)。我知道 3 个函数可以做一些熟悉我的任务的事情:

shell, system and system2.

试图测试那些,我看到了那个命令

shell("notepad") 

打开记事本。据我所知,shell 不允许检查错误(没有可查看的界面stderr)。

当我打电话

system("notepad")

或者

system2("notepad") 

R冻结尝试发出这些命令。

打电话

system("start notepad") 

或者

system2("start notepad") 

返回警告

Warning message:
running command '"start notepad"' had status 127 
4

7 回答 7

16

改编@DavidTseng的答案(抱歉没有足够的声誉来支持它)......

system("cmd.exe", input = "notepad")

在 Windows 中为我工作。

于 2016-11-19T16:29:24.133 回答
5

正如我在评论中提到的,R 文档显示,在 Windows 中,该system()函数不会启动单独的 shell(如果需要)。这就是为什么命令行命令使用 运行system(),但需要单独窗口的记事本不运行的原因:

文档system()

最重要的区别是在类 Unix 系统上启动一个 shell,然后运行命令。在 Windows 上,命令直接运行——使用 shell 作为通过 shell 运行命令的接口(默认情况下是 Windows shell cmd.exe,它与 POSIX shell 有很多不同)。

于 2015-11-11T09:03:40.323 回答
4
system("bash -l", input = "notepad")
于 2016-11-09T12:59:48.903 回答
0

我不确定 R 的更新是否允许这样做,因为这个问题是在将近四年前被问到的,但system("\"C:\path\to\exe.exe\" args", intern = T)对我有用,并且会打开一个单独的子窗口并在 Windows 10 + R 3.6 + RStudio 上工作。

不使用'intern = T'给了我一个返回码127并且没有运行这个过程。

于 2019-08-23T13:43:32.910 回答
0

我遇到过同样的问题。安装过程中还有一个我没有做的额外步骤。

参考网址

https://cran.r-project.org/bin/windows/Rtools/

寻找“将 Rtools 放在 PATH 上”

writeLines('PATH="${RTOOLS40_HOME}\usr\bin;${PATH}"', con = "~/.Renviron")

于 2020-05-21T10:47:22.097 回答
-1

对于 Windows 用户错误:system(path("c:", "program files", "r", "anysoft.EXE")) 但有效:system(path("c:", shQuote("program files"), "r", "anysoft.EXE"))

于 2018-07-13T11:47:53.603 回答
-3

你们把事情弄得这么复杂。我通过参考这个答案解决了这个问题。问题出在 PATH 上。输入Sys.which('')R,你什么也看不到。所以你必须在 CMD 中设置路径,然后Sys.setenv(PATH = '')在 R 中使用才能完成这项工作。

于 2018-08-11T18:04:22.520 回答