2010-01-23 46 views
9

我剛開始學習如何使用python與rpy2。我能夠做出簡單的情節等,但我遇到了R中的許多選項使用「。」的問題。例如,這裏的的R呼叫工作的:Python和Rpy2:使用具有「。」的選項調用繪圖函數。在他們

barplot(T,COL = heat.colors(2),names.arg = C( 「PWN」, 「PWN2」))

其中t是矩陣。

我想在python中使用相同的調用,但它拒絕「。」部分names.arg。我的理解是,在Python中你替換了「。」用「_」表示,例如names_arg,但這也不起作用。我知道這是一個基本的問題,所以我希望有人看到了這一點,並知道修補程序。謝謝!

回答

8

您可以使用字典這裏命名參數(using **),如文檔described,並直接對函數調用R上。另外請記住,RPy2預計其own vector objects。是的,這是一個有點尷尬,但在好的方面,你應該能夠做到在rpy2任何你能在R.

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版本;還有一些。在unreleased 2.1變化,這我還沒有機會看還)

+0

這工作就像一個魅力 - 謝謝! –

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} 
+0

這真的很有幫助,尤其是與答案2結合。現在所有修復,謝謝! –

+0

在這種情況下,您應該將這個或其他答案標記爲已接受。 –

0

隨着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的功能簽名和d ,因爲保存參數名稱轉換將需要對功能包含的R代碼進行分析 。

更多,以及執行系統翻譯 ''的功能示例。 '_'在: http://rpy.sourceforge.net/rpy2/doc-2.1/html/robjects.html#functions

相關問題