我正在从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变量值上使用。
答案 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