gpt4 book ai didi

python - R Reticulate - 以编程方式将定义的变量从 Python 环境移动到 R

转载 作者:行者123 更新时间:2023-12-05 05:37:21 28 4
gpt4 key购买 nike

原因:

我正在使用 globals() 在 Python 中以编程方式创建数据帧.

在下面的代码中,我创建了 5 个数据集,它们以大写的“PREFIX”开头,后跟一个字母,然后以一个后缀结尾。

R

library(reticulate)
repl_python()

python

import os
import pandas as pd

letters = ('a','b','c','d','e')
df_names = []

for ele in letters:
globals()['PREFIX_{}_suffix'.format(ele)] = pd.DataFrame(columns = ['col_a', 'col_b']).astype(str)
df_names.append(['PREFIX_{}_suffix'.format(ele)][0])
print(df_names)
['PREFIX_a_suffix', 'PREFIX_b_suffix', 'PREFIX_c_suffix', 'PREFIX_d_suffix', 'PREFIX_e_suffix']

请求:

我想选择以前缀开头的数据帧(最好使用正则表达式 ^PREFIX )并以编程方式将这些特定数据帧从网状 python 环境移动到 R 环境。

为了这项任务,我将数据帧变量名称添加到 df_names 中.但是,强烈建议使用正则表达式。

我知道变量存储在 py 中可以使用 $ 访问的对象..但我不确定如何迭代地选择数据帧并将这些数据帧以编程方式一次从 python 环境移动到 R 环境。


在 R 中,我通常使用 ls(pattern=<regex>)在 R 环境中选择对象。

在 Python 中,您可以使用 locals() 列出变量,看这个thread .

thread讨论将 python 函数从 R 传递给 python。

最佳答案

这是我使用正则表达式的解决方案:

在 python 中:

  • 创建您的正则表达式模式以获取所需的已定义变量
  • 将您的模式应用到 dir() 输出,它捕获 python 环境中定义的变量
  • 将选定/获取的变量 (dfs) 保存在列表中
import os
import re

r = re.compile("^PREFIX")
py_dfs = list(filter(r.match, dir())) # fetch defined variables from python's env
print(py_dfs)
['PREFIX_a_suffix', 'PREFIX_b_suffix', 'PREFIX_c_suffix', 'PREFIX_d_suffix', 'PREFIX_e_suffix']

在 R 中:

  • 从具有选定变量名称的 python 访问该列表
  • 使用 R 的 reticulate::py_eval 评估您的 python 对象,使用 reticulate::py_to_r 将其转换为 r
  • 使用 assign 为动态定义的变量分配与 python 中的变量(数据帧)相同的 name
for (df in py$py_dfs){
name = df
r_df = py_to_r(py_eval(df))
assign(paste0(name), r_df)
}

> ls(pattern="^PREFIX")
[1] "PREFIX_a_suffix" "PREFIX_b_suffix" "PREFIX_c_suffix" "PREFIX_d_suffix" "PREFIX_e_suffix"
> dim(PREFIX_a_suffix)
[1] 0 2
> class(PREFIX_a_suffix)
[1] "data.frame"
>

关于python - R Reticulate - 以编程方式将定义的变量从 Python 环境移动到 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73149140/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com