我正在R上运行新脚本,并且尝试使用r中的system()函数调用文件.exe。我跑:
system("C:/Program Files (x86)/OxMetrics6/ox/bin/oxl.exe I:/Code R/GarchOxModelling.ox", show.output.on.console = TRUE, wait = TRUE)
但它似乎无能为力。当我手动启动文件GarchOxModelling.ox时,它可以工作。您对如何从R开始工作有任何想法吗?
提前致谢
未经测试,请尝试
ret <- system(paste(shQuote("C:/Program Files (x86)/OxMetrics6/ox/bin/oxl.exe"),
shQuote("I:/Code R/GarchOxModelling.ox")),
show.output.on.console = TRUE, wait = TRUE)
您在问题中提供的代码存在一些问题:
R在语法上是错误的:
"system(C:/Program Fil...", show.output.on.console = TRUE, wait = TRUE)
就像输入
"ABC", x=1, y=2)
这应该出错。
即使假设前导引号不正确,您也需要在可执行文件名称的开头加上引号,如下所示:
system("C:/Program File...", ...)
不过,这是逐字传递到shell的。尽管Windows可以正确地猜测嵌入空间,但实际上并不是一个好习惯,因为假设所有情况都可能发生,因此您应该手动引用所有参数,其中(a)确实在其中包含空格,或者(b)您不知道,因为它们是变量。在这种情况下,我希望使用shQuote
,但dQuote
可能就足够了。
system(paste(shQuote("C:/Program Files (x86)/OxMetrics6/ox/bin/oxl.exe"),
shQuote("I:/Code R/GarchOxModelling.ox")),
show.output.on.console = TRUE, wait = TRUE)
我建议您考虑使用intern=TRUE
而不是show.output...
,以便您可以以编程方式验证输出是否符合您的期望。
最后一个建议,我发现该processx
程序包对于这样的调用更为可靠,
# library(processx)
ret <- processx::run("C:/Program Files (x86)/OxMetrics6/ox/bin/oxl.exe", "I:/Code R/GarchOxModelling.ox")
自动处理报价的地方。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句