如何 return 来自 Python 中执行的 R 脚本的多个对象

How to return multiple objects from R script executed in Python

所以我正在努力使用 rpy2 包来集成 R 和 Python 之间的一些工作流程。

例如,假设我正在尝试 运行 一个在 R 中进行线性回归的 Python 脚本,我想 return 它的所有元素(在实际上,我正在尝试做比这复杂得多的事情。

我在 Python 中执行以下命令(调用 R;假设您已安装 rpy2):

import rpy2.robjects as ro
test = ro.r('''
            # Load in data
            df <- mtcars
            # Run regression
            out = lm(formula='mpg ~ cyl + hp + wt',data=df)
            ''')

然后呢?我有一个问题:

  1. 如何从结果中提取各种元素?在 R 中,它们将是 out$coefficientsout$residuals,等等。我知道有这方面的文档,但我有点迷路了。理想情况下,我希望元素采用有用的格式,因此 pandas 数据帧或索引列表等

  2. df会怎样? robjects.r() 似乎只是保存你最后给的东西并扔掉其他所有东西。我想我可以使用它,但它并不理想。

  3. 与2相关:有没有更好的方法来做到这一点?一般来说,如果有人可以为这种事情提出 "best practice",那将会很有帮助,因为我确信有很多人对使用 Python 感兴趣,但偶尔会有一个非常自定义的功能他们需要使用 R 进行调用,但他们不想看中集成。也许使用 Pythonic 输入参数调用 R 函数的方法会很棒。

问题 1:如何从结果中提取各种元素?

答案 1:在你 运行 你的 R 脚本之后:

test = ro.r(your_R_script)

您可以使用此代码打印出 test 对象中的所有 namesvalues

# iterate on names and values
# be careful output is v long
for n,v in test.items():
    print(n)
    print(v)

要列出所有可用的 names,运行 此代码:

test.names

输出:

StrVector with 12 elements.
'coeffici... 'residuals' 'effects' 'rank' ... 'xlevels' 'call'  'terms' 'model'

要打印 'residuals'、运行 的值:

test[test.names.index('residuals')]

Q.2:df 会怎样?

Ans.2:在你删除它之前,它在R环境中仍然可用。您可以 运行 简单的 R 代码来检查:

ro.r('''
        # View dataframe
        df
        ''')

问题 3:有更好的方法吗?

答案 3:(没有回答。)