2010-01-23 79 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

相关问题