問題タブ [rpy2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python と Rpy2: "." を含むオプションを使用してプロット関数を呼び出す それらの中で
Pythonでrpy2を使用する方法を学び始めたばかりです。単純なプロットなどを作成することはできますが、R の多くのオプションで "." が使用されているという問題に遭遇しました。たとえば、動作する R 呼び出しは次のとおりです。
barplot(t, col=heat.colors(2), names.arg=c("pwn", "pwn2"))
ここで、t は行列です。
Pythonで同じ呼び出しを使用したいのですが、「。」を拒否します。names.arg の一部。私の理解では、Pythonでは「。」を置き換えます。「_」を使用するため、たとえばnames_argですが、それも機能しません。これは基本的な問題であることはわかっているので、誰かがこれを見て修正を知っていることを願っています。ありがとう!
python - rpy2 用の Python オブジェクトの変換
次のコードは、rpy2 でヒートマップを作成することになっています。
ただし、次のエラーが発生します
ドキュメントから、r.heatmap が「数値行列」を期待していることがわかります。np.array を必要なデータ型に変換するにはどうすればよいですか?
python - rpy2: data.frame を numpy 配列に変換する
R に data.frame があります。多くの (125) 配列からの遺伝子発現レベルなど、多くのデータが含まれています。主に R での私の無能さと、これが 30 分の仕事になるはずだったという事実のために、私は Python のデータが欲しいです。
次のコードを機能させたいと思います。このコードを理解するには、変数path
にデータ セットへのフル パスが含まれていることを知っておいてください。このデータ セットをロードすると、 という変数が得られますimmgen
。immgen
それがオブジェクト (BioconductorExpressionSet
オブジェクト) であり、exprs(immgen)
125 列 (実験) と数万行 (名前付き遺伝子) のデータ フレームを返すことを知っています。(念のため、これは Python コードで、robjects.r を使用して R コードを呼び出します)
このコードは実行されますが、expression_data
単にarray([[1]])
.
次のような理由により、e
生成されたデータフレームを表していないと確信しています。exprs()
しかし、もう一度誰が知っていますか?e
私のdata.frameを表していたとしても、それが配列に直接変換されないことは十分に公平です-データフレームには配列(行名と列名)よりも多くのものが含まれているため、人生はこれほど簡単ではないはずです. ただし、変換を実行する方法はまだわかりません。ドキュメントは私には少し簡潔すぎますが、ドキュメントの見出しの理解が限られているため、これが可能であることを示唆しています。
誰でも何か考えはありますか?
python - rpy2 でエラーメッセージを抑制する方法
次のコードは機能しません。R の警告メッセージで python エラーが発生するようです。
そのコード例を ipython で実行すると機能しますが、スクリプト内で実行すると errorTypeError: 'module' object is unsubscriptable が発生します。これは警告メッセージによるものだと思います。
この問題を回避する最善の方法は何ですか? 前もって感謝します!
python - matplotlib を使用して表面/等高線図に 3 タプル データ ポイントをプロットする
外部プログラムによって XYZ 値として生成されたサーフェス データがあります。matplotlib を使用して、次のグラフを作成します。
- 表面プロット
- 等高線図
- 表面プロットを重ねた等高線図
matplotlib でサーフェスとコンターをプロットする例をいくつか見てきましたが、Z 値は X と Y の関数、つまり Y ~ f(X,Y) のようです。
何らかの形で Y 変数を変換する必要があると思いますが、これを行う方法を示す例をまだ見ていません。
それで、私の質問は次のとおりです。(X、Y、Z) 点のセットが与えられた場合、そのデータから表面プロットと等高線プロットを生成するにはどうすればよいですか?
ところで、明確にするために、散布図を作成したくありません。また、タイトルで matplotlib について言及しましたが、これらのチャートを作成できるのであれば、rpy(2) を使用することを嫌いません。
python - Python と rpy2: 実行時にグラフィックを調整/クリアするにはどうすればよいですか?
私は rpy2 を使用してデータ分析と Python でのプロットを行っています。プロットを描画すると、プログラムが終了するまでウィンドウがハングアップするという事実を除いて、正常に動作します。実行時にプロットをクリアする方法はありますか? さらに、ウィンドウのサイズを変更すると、プロットは消えますが、ウィンドウは残ります。R を対話的に使用する場合、ウィンドウのサイズを変更すると、単にプロットのサイズが調整されます。Python内でこの機能を使用したいと思います。
たとえば、次のコードを実行すると、単純なプロットが表示されます。
ただし、ウィンドウのサイズを変更したい場合はプロットが消え、コードで他のことを続けたい場合は、このウィンドウがハングアップします。Rで機能してプロットをクリアするコマンドがある場合、機能する可能性がありますが、見つからないようです。任意のポインタをいただければ幸いです。
python - Python Rpy R データ処理の最適化
Rpy2でブリッジされたPythonとRでデータ処理プログラムを書いています。
入力データはバイナリで、Python を使用してデータを読み取り、R に渡し、結果を収集して出力します。
データは、それぞれ約 100 バイト (値ごとに 1 バイト * 100 値) の断片に編成されます。
それらは現在機能していますが、速度は非常に遅いです。1GB サイズ (つまり、10^7 ピース) のデータに対する私のテストの一部を次に示します。
Rpy2 呼び出しを無効にして予行演習を行うと、1 つのスレッドを使用して Intel(R) Xeon(TM) CPU 3.06GHz で Python がすべてループするのに約 90 分かかります。
その Xeon デュアル コアですべての機能とマルチスレッドを有効にすると、プログラムが完了するまでに (概算で) 200 時間ほどかかります。
Python プログラムを数回強制終了しました。コール スタックはほとんど常に Rpy2 関数インターフェイスを指しています。プロファイリングも行いましたが、同様の結果が得られました。
これらすべての観察結果は、Rpy2 によって呼び出される R 部分がボトルネックであることを示しています。そのため、R プログラムのスタンドアロン バージョンをプロファイリングしましたが、プロファイリングの概要は「匿名」を指しています。私はまだ、R スクリプトのどの部分が最も時間のかかる部分であるかを確認する方法を推し進めています。****更新、以下の私の編集を参照してください*****
疑わしい候補が 2 つあります。1 つは、cran[1] の wmtsa を使用した連続ウェーブレット変換 (CWT) とウェーブレット変換モジュラス マキシマ (WTMM) であり、もう 1 つは、ex-Gaussion 曲線の非線形フィッティングです。
私の頭に浮かぶのは次のとおりです。
フィッティングのために、R ルーティングをインライン C コードに置き換えることができますか? Cおよびfortranで利用可能な多くのフィッティングライブラリがあります...(ネットからのアイデア;私はそれをしたことがありません;不明です)
ウェーブレット アルゴリズムの場合.... C でホットスポットを書き直すには、wmtsa パッケージを分析する必要がありますか? .... C または fortran を使用して wmtsa パッケージ全体を再実装することは、私にとって非常に簡単なことではありません。私はプログラミングの経験があまりありません。
ファイル内のデータは 20 個の連続したバイトで構成されています。これを C のような char* 配列に直接マップできますか? 現在、私のPythonプログラムは一度に1バイトを読み取ってリストに追加するだけで、遅いです。コードのこの部分には 1.5 時間かかるのに対し、R では約 200 時間かかるため、それほど緊急ではありません。
実際の問題を解決する際にプログラムの効率性に出会ったのはこれが初めてです。私はSTFWで、情報に圧倒されました。これからどうすればいいのか、アドバイスをお願いします。
乾杯!
脚注:
* アップデート *
cran の proftools のおかげで、コール スタック グラフを作成することができました。そして、約 56% の時間が wmtsa に費やされていることがわかりました。コード スニペットは次のようになります。
~28% の時間は nls に費やされます:
ここでは、gamlss.dist パッケージからの dexGAUS の評価に多くの時間がかかります。
残りの R 時間の約 10% は、データの受け渡し/分割/集約/サブセットに費やされます。
python - rpy2 を介して Python でテストを実行する際の問題
2 週間前にコーディングを開始したことを考えると、これは簡単な修正になると思います。Rpy2 を介して、R で既に記述されている関数 (?) を使用して、Python で統計テスト (マンテル、2 つの距離行列間の相関関係を探す) を実行しようとしています。Rモジュールは「ade4」で、「mantel.rtest」が含まれています
編集:これで動作します! 「これはエラーを返します: "AttributeError: 'R' object has no attribute 'mantel'"これは、ここで呼び出されているオブジェクトが "." で切り捨てられていると信じさせます (つまり、"mantel" と完全な "mantel.rtest 「.」のないオブジェクトとして「mantel.rtest」を再割り当てしようとしました ex) rmantel = "mantel.rtest" そして、その結果 = robjects.r.rmantel (M1, M2, nrepet = 9999) のみを代入してみました「AttributeError: 'R' オブジェクトに属性 'rmantel' がありません」というエラーが表示されます。これは機能しませんでした。この問題を回避する方法について何か考えはありますか?
新しい問題: Mantel テストには "dist" 形式のデータが必要なため、編集したコードを実行すると、次のエラーが表示されます。 "
そのため、ファイルをその形式に変換しようとしましたが、結果を印刷すると、正しいサイズのマトリックスの下半分ですが、すべてのフィールドが「NA」で埋められます
わかった」
1 2 3 4 5 6 7 8 9 10 11 12 13
2 該当なし
3 な な
4 なななな
5 なななななな
6 なななななななな
7 ななななななななななななななななななななななななななななななななななななな
8 なななななななななななななななななななななななななななななななななななななななななななななななななな
9 なななななななななななななななななななななななななななななななななななななななななななななななななな
10 なななななななななななななななななな
11 なななななななななななななななななななな
12 ななななななななななななななななななななななななななななななななななななななな
13 なななななななななななななななななななななななななななななななななななななななななななな
14 ななななななななななななななななななななななななななななななななななななななななななななななな
python - PythonタプルとRリストをrpy2でマッピングしますか?
rpy2 オブジェクトと python オブジェクトのマッピングを理解するのに苦労しています。
Python でタプル オブジェクトを返す関数 (x) があり、このタプル オブジェクトを R オブジェクト リストまたはベクトルにマップしたいと考えています。
まず、私はこれをやろうとしています:
エラーで失敗: rinterface.RRuntimeError: eval(expr、envir、enclos) のエラー: オブジェクト 'tlist' が見つかりません
だから私は他の戦略を試しています:
このエラーで失敗: TypeError: 'R' オブジェクトは項目の割り当てをサポートしていません
理解していただけますか?どうもありがとう !!
python - Python でプログラム (R) を実行して操作を実行する (スクリプトを実行する)
私は、理想的には結果を表示して保存するために、PythonからRスクリプトを実行しようとしています。rpy2 を使用するのは少し苦労したので、R を直接呼び出すだけでよいと考えました。「os.system」や「subprocess.call」などを使用する必要があるような気がしますが、モジュール ガイドを解読するのに苦労しています。
これは R スクリプト "MantelScript" で、特定の統計テストを使用して一度に 2 つの距離行列 (distmatA1 と distmatB1) を比較します。これはRで機能しますが、一連のファイルをペアごとに読み込んで比較するための反復ビットをまだ入れていません(ところで、これについても支援が本当に必要です! ):
これは、以前に定式化されたいくつかのリストを読み取り、この Mantel Test を介してそれらを比較するために行列を引き出す、私の python スクリプトの関連部分です (identityA から最初の行列を取り出し、identityB のすべての行列と順次比較し、繰り返します)。 identityB からの 2 番目の行列など)。これらのファイルを保存してから、R プログラムを呼び出してそれらを比較したいと考えています。