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

问题描述 投票:0回答:1

所以我很难使用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函数的方法会很棒。
python r rpy2
1个回答
0
投票

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

Ans.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会发生什么?

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

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

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

答案3 :(没有答案。)

© www.soinside.com 2019 - 2024. All rights reserved.