在R中,用带有命令行参数的空格调用路径中的外部程序



这里有很多令人沮丧的问题。本质上,我希望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}")

相关内容

  • 没有找到相关文章

最新更新