9

Pythonでrpy2を使用する方法を学び始めたばかりです。単純なプロットなどを作成することはできますが、R の多くのオプションで "." が使用されているという問題に遭遇しました。たとえば、動作する R 呼び出しは次のとおりです。

barplot(t, col=heat.colors(2), names.arg=c("pwn", "pwn2"))

ここで、t は行列です。

Pythonで同じ呼び出しを使用したいのですが、「。」を拒否します。names.arg の一部。私の理解では、Pythonでは「。」を置き換えます。「_」を使用するため、たとえばnames_argですが、それも機能しません。これは基本的な問題であることはわかっているので、誰かがこれを見て修正を知っていることを願っています。ありがとう!

4

3 に答える 3

9

ドキュメントで説明されているように、名前付き引数(** を使用)にここで辞書を使用し、関数に対して R を直接呼び出すことができます。また、RPy2 は独自のベクター オブジェクトを想定していることにも注意してください。はい、少し厄介ですが、プラス面としては、R で実行できることはすべて rpy2 で実行できるはずです。

from rpy2 import robjects
color = robjects.r("heat.colors")()
names = robjects.StrVector(("pwn", "pwn2"))
robjects.r.barplot(t, col=color, **{"names.arg":names})

(これは rpy2 バージョン 2.0.x 用であることに注意してください。リリースされていない 2.1には、まだ見る機会がなかった変更がいくつかあります。)

于 2010-01-24T03:13:26.870 に答える
1

Rpy がこれを受け入れるかどうかはわかりませんが、キーワード パラメータにピリオドを含めることができます。ただし、辞書を介してそれらを渡す必要があります。このような:

>>> def f(**kwds): print kwds
... 
>>> f(a=5, b_c=6)
{'a': 5, 'b_c': 6}
>>> f(a=5, b.c=6)
Traceback (  File "<interactive input>", line 1
SyntaxError: keyword cant be an expression (<interactive input>, line 1)
>>> f(**{'a': 5, 'b.c': 6})
{'a': 5, 'b.c': 6}
于 2010-01-24T00:34:02.067 に答える
0

rpy2-2.1.0 では、次のように記述する 1 つの方法があります。

from rpy2.robjects.packages import importr
graphics = importr("graphics")
grdevices = importr("grDevices")

graphics.barplot_default(t, 
                         col = grdevices.heat_colors(2),
                         names_arg = StrVector(("pwn", "pwn2")))

barplot_default (barplot ではなく) を使用する必要があるのは、R の関数シグネチャで省略記号 '...' が広範囲に使用されていることと、パラメーター名の変換を保存するには、関数に含まれる R コードの分析が必要になるためです。

さらに、「.」の体系的な翻訳を実行する関数の例。'_' は http://rpy.sourceforge.net/rpy2/doc-2.1/html/robjects.html#functionsにあります。

于 2010-01-26T19:27:00.407 に答える