【问题标题】:Get result to python variable after executing R script执行R脚本后获取python变量的结果
【发布时间】:2015-10-01 21:58:41
【问题描述】:

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

【问题讨论】:

  • 为什么不自己定义 value 变量,让它在 session 中而不是在函数中可用?>
  • 作弊方式:运行程序,将数据写入本地文本文件,然后从 Python 访问该文件:P
  • 这就是我曾经尝试将信息从 Python 传输到 PHP/JavaScript 的方式
  • 这篇 SO 帖子似乎回答了您的问题:stackoverflow.com/questions/4846891/…

标签: python r subprocess


【解决方案1】:

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

a.py:

print 'hello'

b.py:

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

b.py 的输出:

helloworld

【讨论】:

  • r 脚本只是我给出的一个例子。我需要执行 r 代码并在 python 中得到答案
  • 您可以运行程序,将所有数据写入一个文本文件,然后从 Python 访问该文件
【解决方案2】:

你可以使用rpy2:

import rpy2.robjects as robjects

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

作为替代方案,您可以重写您的 R 脚本,以便它将结果以某种众所周知的格式(例如 json)转储到标准输出,然后使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多