这里有很多令人沮丧的问题。本质上,我希望R打开一个带有命令行参数的外部程序。我目前正试图在Windows机器上实现它,理想情况下它可以跨平台工作。
程序(chimera.exe(位于包含空格的目录中:C:Program FilesChimera1.15bin
命令行选项可以是例如--nogui
标志和脚本名称,因此我将从shell中编写(除了空间细节(:
C:Program FilesChimera1.15binchimera.exe --nogui scriptfile
如果我在windows cmd.exe中转到目录本身并只键入chimera.exe --nogui scriptfile
,这就可以了
现在在R:
我一直在玩shell()
、shell.exec()
和system()
,但基本上我失败了,因为有空格和/或路径分隔符。
大多数时候system((只是打印";127〃;无论出于何种原因:
> system("C:/Program Files/Chimera1.15/bin/chimera.exe")
[1] 127`
后/前斜线使问题进一步复杂化,但无法使其发挥作用:
> system("C:Program FilesChimera1.15binchimera.exe")
Error: 'P' is an unrecognized escape in character string starting "CP"
> system("C:\Program Files\Chimera1.15\bin\chimera.exe")
[1] 127
> system("C:\Program Files\Chimera1.15\bin\chimera.exe")
[1] 127
> system("C:\Program\ Files\Chimera1.15\bin\chimera.exe")
[1] 127
当我把程序安装在没有空格的目录中时,它就可以工作了。如何转义或传递system()
或相关命令中的空间,或者如何调用程序?
尝试system2
,因为它不使用cmd
行处理器,并使用r"{...}"
来避免双反斜杠。这假定R 4.0或更高版本。有关引号语法的完整定义,请参阅?Quotes
。
chimera <- r"{C:Program FilesChimera1.15binchimera.exe}"
system2(chimera, c("--nogui", "myscript"))
例如,这对我有效(您可能需要更改路径(:
R <- r"{C:Program FilesRR-4.1binx64Rgui.exe}" # modify as needed
system2(R, c("abc", "def"))
当Rgui启动时,我们可以通过在R:的新实例中运行它来验证参数是否被传递
commandArgs()
## [1] "C:\PROGRA~1\R\R-4.1\bin\x64\Rgui.exe"
## [2] "abc"
## [3] "def"
系统
或者使用system
,但在路径周围加引号,以便cmd
正确解释它——如果它是在Windowscmd
行中键入的,那么也需要引号。
system(r"{"C:Program FilesChimera1.15binchimera.exe" --nogui myscript}")