我有一个PowerShell脚本(例如位于C:\directoryName\coolScript.ps1)。如果我想从R调用它,我可以运行
system('powershell -file "C:\\directoryName\\coolScript.ps1"')
如果我尝试对
system2()
执行相同操作,则不会返回任何错误,但不会执行脚本。由于system()
命令的文档指出system2()
“建议用于新代码”,因此我想使用system2()
。有没有办法做到这一点? 最佳答案
与system()
不同,command
的system2()
参数始终由shQuote引用,因此它必须是不带参数的单个命令,而参数是通过command
参数传递给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"))
我会尝试 :
system2("powershell", args=c("-file", "C:\\directoryName\\coolScript.ps1"))
您应该知道的另一件事是R-3.2.1\bin\i386(32位)和R-3.2.1\bin\x64(64位)中有两个版本的R可执行文件。默认情况下,只有第一个安装在32位版本的Windows上,而两个都安装在64位操作系统上。 R的32位版本将调用PowerShell的32位版本,而64位版本则相同,因此请小心使用
Set-ExecutionPolicy
作为正确的版本。