【发布时间】:2019-02-27 23:09:59
【问题描述】:
所以我正在努力使用 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)
''')
现在呢?我有一个问题:
如何从结果中提取各种元素?在 R 中,它们将是
out$coefficients和out$residuals等。我知道有这方面的文档,但我有点迷茫。理想情况下,我希望元素采用有用的格式,例如 pandas 数据框或索引列表等。df会发生什么?robjects.r()似乎只是保存了您最后提供的任何东西,并丢弃了其他所有东西。我想我可以使用它,但这并不理想。与 2 相关:有更好的方法吗?一般来说,如果有人可以为这类事情提出“最佳实践”,那将很有帮助,因为我确信有很多人对使用 Python 感兴趣,但偶尔有一个非常自定义的函数需要调用 using R 但他们不想看中集成。也许使用 Pythonic 输入参数调用 R 函数的方法会很棒。
【问题讨论】:
-
任何明智的接口都会为您提供某种类似列表的结构,其索引的名称与您在 R 中找到的名称相同。python 没有与 R 的
str类似的功能。它必须。搜索。 stackoverflow.com/questions/27637281/… -
当然。我能够(在上述情况下)通过以下方式提取系数:
rpy2.robjects.pandas2ri.ri2py(test.rx2('coefficients')),但这仍然不能回答test中df发生的情况,而且它也掩盖了这个解决方案的笨拙程度应该是rpy2的基本功能 -
我不明白。您似乎正在通过一个接口访问 R 功能,该接口预计只返回
out的值,至少如果我了解典型的函数式编程的话。您是否希望将所有 R 环境都返回给 python?我想这是可能的,但这不是我作为经验丰富的 R 用户所期望的。您能否指出建议 R 环境中的所有对象在将控制权返回给 python 后都应该可用的文档? -
我想我只是觉得奇怪的是该脚本没有返回整个环境,因为我没有进行特定的函数调用。从理论上讲,
df与通过test访问的out一样有效。唯一的区别是它们被调用的顺序。我写在这里是因为这里的文档不是很好... -
即使在函数外部执行多行表达式,R 也只返回最后一次求值的结果。返回多个对象的方法是将
list(.)包裹在它们周围,就像使用函数时一样。