使用system2()而不是system()

时间:2015-07-20 06:59:32

标签: r powershell

我有一个PowerShell脚本(例如在C:\ directoryName \ coolScript.ps1)。如果我想从R调用它,我可以运行

system('powershell -file "C:\\directoryName\\coolScript.ps1"')

如果我尝试对system2()执行相同操作,则不会返回错误,但不会执行脚本。由于system()命令的文档说新建代码推荐使用system2()“,因此我想使用system2()。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:14)

system()不同,command的{​​{1}}参数始终由shQuote引用,因此它必须是没有参数的单个命令,而参数传递给system2()带有command参数的{1}}。

它们都有效:

args

我会尝试:

system("sed -i 's/oldword\\s/oldword/g' d:/junk/x/test.tex")
system2("sed", args=c("-i", "s/oldword\\s/newword/g", "d:/junk/x/test.tex"))

你应该注意的另一件事是R-3.2.1 \ bin \ i386(32位)和R-3.2.1 \ bin中有两个版本的R可执行文件\ x64(64位)。默认情况下,只有第一个安装在32位版本的Windows上,但都安装在64位操作系统上。 32位版本的R将调用PowerShell的32位版本,而64位版本则相同,因此请谨慎使用system2("powershell", args=c("-file", "C:\\directoryName\\coolScript.ps1")) 作为正确版本。