执行R脚本后获得python变量的结果

时间:2015-07-13 14:55:35

标签: python r subprocess

我正在从python执行一个r脚本,我希望输出在python变量中可用。我怎么能这样做?

python脚本:

import subprocess 

def runR(id, lat, long):
    value = subprocess.popen("C:/R/R-3.2.0/bin/Rscript      E:/Personal/python/script.R --args "+id+" "+lat+" "+long , shell=True)
    print value

R脚本:

a = "Hello";

我希望Hello可以在python变量值上使用。

2 个答案:

答案 0 :(得分:2)

您可以使用rpy2

import rpy2.robjects as robjects

robjects.r('''
a = "Hello";
''')
a = robjects.r['a']

作为替代方法,你可以重写你的R脚本,以便它以一些众所周知的格式(如json)将其结果转储到stdout,然后使用subprocess模块运行它,并解析结果:

#!/usr/bin/env python
import json
import subprocess

id, lat, long = 1, 40, 74 
out = subprocess.check_output(r"C:\R\R-3.2.0\bin\Rscript.exe "
                              r"E:\path\to\script.R --args "
                               "{id} {lat} {long}".format(**vars()))
data = json.loads(out.decode('utf-8'))

注意:如果您在此处使用可执行文件的完整路径,则无需在Windows上使用shell=True

答案 1 :(得分:0)

您可以根据需要修改以下示例。

<强> a.py:

print 'hello'

<强> b.py:

import subprocess
result = subprocess.check_output(["python", "a.py"])
print result.strip() + 'world'

b.py的输出:

helloworld