再一次,我在 Notebook 和新兴的 rmagic 基础设施上玩得很开心,但我对两者之间的桥梁还有另一个问题。目前,我正在尝试将 pandas DataFrame 的几个子集传递给 R,以便使用 ggplot2 进行可视化。事先说明一下,我知道我可以传递整个 DataFrame 并在 R 中执行额外的子集设置。然而,我的偏好是利用 Python 的数据管理功能,并且我正在执行的子集操作更容易和更快使用熊猫而不是R中的等效操作。所以为了效率和病态的好奇心......
我一直在试图弄清楚是否有办法一次推动多个对象。问题是有时我不知道需要推送多少项目。为了保持灵活性,我一直在整个脚本的前端使用 DataFrame 填充字典。以下代码提供了我正在处理的内容的合理传真(为简单起见,我没有通过 com.convert_to_r_dataframe 进行转换,但我的真实代码确实采取了这一步):
import pandas as pd
from pandas import DataFrame
%load_ext rmagic
d1=DataFrame(np.arange(16).reshape(4,4))
d2=DataFrame(np.arange(20).reshape(5,4))
d_list=[d1,d2]
names=['n1','n2']
d_dict=dict(zip(names,d_list))
for name in d_dict.keys():
exec '%s=d_dict[name]' % name
%Rpush n1
可以看出,我可以分配一个静态名称并将 DataFrame 单独推送到 R 命名空间中(以及在“列表”>> %Rpush n1 n2 中)。我不能做的是如下的事情:
for name in d_dict.keys():
%Rpush d_dict[name]
该片段引发异常>> KeyError:u'd_dict [name]'。我还尝试将动态命名的 DataFrames 存放在列表中,列表引用最终指向数据而不是对象引用:
df_list=[]
for name in d_dict.keys():
exec '%s=d_dict[name]' % name
exec 'df_list.append(%s)' % name
print df_list
for df in df_list:
%Rpush df
[ 0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15,
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
4 16 17 18 19]
当我遍历列表内容时,%Rpush 没有抛出异常,但是在 R 命名空间中找不到 DataFrame。除了讨论将列表转换为 R 向量之外,我还没有找到关于这个主题的太多讨论。任何帮助将不胜感激!