使用Rscript.exe shell在Python中执行.R脚本

时间:2012-11-29 02:45:19

标签: python r rscript

我在以下路径中本地保存了.R文件:

Rfilepath = "C:\\python\\buyback_parse_guide.r"

RScript.exe的命令是:

RScriptCmd = "C:\\Program Files\\R\\R-2.15.2\\bin\\Rscript.exe --vanilla"

我试过跑:

subprocess.call([RScriptCmd,Rfilepath],shell=True)

但它返回1 - 并且.R脚本未成功运行。我究竟做错了什么?我是Python的新手,所以这可能是一个简单的语法错误......我也试过这些,但它们都返回1:

subprocess.call('"C:\Program Files\R\R-2.15.2\bin\Rscript.exe"',shell=True)

subprocess.call('"C:\\Program Files\\R\\R-2.15.2\\bin\\Rscript.exe"',shell=True)

subprocess.call('C:\Program Files\R\R-2.15.2\bin\Rscript.exe',shell=True)

subprocess.call('C:\\Program Files\\R\\R-2.15.2\\bin\\Rscript.exe',shell=True)

谢谢!

2 个答案:

答案 0 :(得分:0)

RScriptCmd只需要是可执行文件,没有命令行参数。所以:

RScriptCmd = "\"C:\\Program Files\\R\\R-2.15.2\\bin\\Rscript.exe\""

然后Rfilepath实际上可以是所有参数 - 并重命名为:

 RArguments = "--vanilla \"C:\\python\\buyback_parse_guide.r\""

答案 1 :(得分:0)

看起来你有类似的问题。我不得不重新安装RScript到一个没有空格的路径。

请参阅:Running Rscript via Python using os.system() or subprocess()

这就是我如何计算Python和Rscript之间的通信:

参与Python:

from subprocess import PIPE,Popen,call
p = subprocess.Popen([ path/to/RScript.exe, path/to/Script.R, Arg1], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
out = p.communicate()
outValue = out[0]
执行Script.R

后,

outValue包含输出值

参与R-Script:

args <- commandArgs(TRUE)
argument1 <- as.character(args[1])
...
write(output, stdout())

output是要发送给Python的变量