Python と Rpy2:「。」を持つオプションを使用してプロット関数を呼び出します。それらの中に
質問
Python で rpy2 を使用する方法を学び始めたところです。簡単なプロットなどは作成できますが、R の多くのオプションで「.」が使用されているという問題に遭遇しました。たとえば、機能する R 呼び出しは次のとおりです。
barplot(t,col=heat.colors(2), names.arg=c("pwn", "pwn2"))
ここで、 t は行列です。
Pythonで同じコールを使用したいのですが、「」を拒否します。 names.argの一部。私の理解は、Pythonで「」を置き換えることでした。 「_」では、たとえばnames_argですが、それも機能していません。これが基本的な問題であることはわかっているので、誰かがこれを見て修正方法を知っていることを願っています。ありがとう!
解決
ここで名前付き引数の辞書を使用できます (**を使用して) として 説明された ドキュメントで、関数に対して 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 まだ見る機会がありません。)
他のヒント
私は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}
rpy2-2.1.0で、それを書くための一つの方法は以下のようになります:
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'sfunctionシグネチャで省略記号を広範囲に使用「...」と 保存パラメータ名の変換が必要になるという事実のために 機能が含まれているRコードの解析
より、かつ体系の変換を行う機能の一例 の「」 「_」にはです: http://rpy.sourceforge.net/rpy2/doc- 2.1 / HTML / robjects.html#機能する