繰り返しになりますが、私は Notebook と新しい rmagic インフラストラクチャで素晴らしい時間を過ごしていますが、2 つの間の架け橋について別の質問があります。現在、ggplot2 で視覚化するために、pandas DataFrame のいくつかのサブセットを R に渡そうとしています。前もって明確にしておくと、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 ベクトルへの変換に関する話以外に、このトピックに関する多くの議論を見つけることができませんでした。どんな助けでも大歓迎です!