如何从在Python中执行的R脚本返回多个对象

时间:2019-02-27 23:09:59

标签: python r rpy2

因此,我正在努力使用rpy2软件包在R和Python之间集成一些工作流。

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

我在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有关:有更好的方法吗?通常,如果有人可以为这种事情提出“最佳实践”,那将会很有帮助,因为我确信有很多人对使用Python感兴趣,但是偶尔会有一个非常自定义的函数需要使用R,但是他们不想看上这种集成。也许使用Pythonic输入参数调用R函数的方法会很棒。

1 个答案:

答案 0 :(得分:0)

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

答案1:运行R脚本后:

test = ro.r(your_R_script)

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

# 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'

要打印“残差”的值,请运行以下命令:

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

问题2:df会怎样?

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

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

Q.3:有更好的方法吗?

答案3 :(没有答案。)