如何 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)
''')
然后呢?我有一个问题:
如何从结果中提取各种元素?在 R 中,它们将是 out$coefficients
和 out$residuals
,等等。我知道有这方面的文档,但我有点迷路了。理想情况下,我希望元素采用有用的格式,因此 pandas 数据帧或索引列表等
df
会怎样? robjects.r()
似乎只是保存你最后给的东西并扔掉其他所有东西。我想我可以使用它,但它并不理想。
与2相关:有没有更好的方法来做到这一点?一般来说,如果有人可以为这种事情提出 "best practice",那将会很有帮助,因为我确信有很多人对使用 Python 感兴趣,但偶尔会有一个非常自定义的功能他们需要使用 R 进行调用,但他们不想看中集成。也许使用 Pythonic 输入参数调用 R 函数的方法会很棒。
问题 1:如何从结果中提取各种元素?
答案 1:在你 运行 你的 R 脚本之后:
test = ro.r(your_R_script)
您可以使用此代码打印出 test
对象中的所有 names
和 values
。
# 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:(没有回答。)
所以我正在努力使用 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)
''')
然后呢?我有一个问题:
如何从结果中提取各种元素?在 R 中,它们将是
out$coefficients
和out$residuals
,等等。我知道有这方面的文档,但我有点迷路了。理想情况下,我希望元素采用有用的格式,因此 pandas 数据帧或索引列表等df
会怎样?robjects.r()
似乎只是保存你最后给的东西并扔掉其他所有东西。我想我可以使用它,但它并不理想。与2相关:有没有更好的方法来做到这一点?一般来说,如果有人可以为这种事情提出 "best practice",那将会很有帮助,因为我确信有很多人对使用 Python 感兴趣,但偶尔会有一个非常自定义的功能他们需要使用 R 进行调用,但他们不想看中集成。也许使用 Pythonic 输入参数调用 R 函数的方法会很棒。
问题 1:如何从结果中提取各种元素?
答案 1:在你 运行 你的 R 脚本之后:
test = ro.r(your_R_script)
您可以使用此代码打印出 test
对象中的所有 names
和 values
。
# 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:(没有回答。)