Python和Rpy2:使用具有“。”的选项调用绘图函数。在他们中

时间:2010-01-23 23:36:47

标签: python rpy2

我刚开始学习如何在python中使用rpy2。我能够制作简单的情节等,但我遇到了R中许多选项使用“。”的问题。例如,这是一个有效的R调用:

  

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

其中t是矩阵。

我想在python中使用相同的调用,但它拒绝“。” names.arg的一部分。我的理解是在python中你替换了“。”使用“_”,所以names_arg例如,但这也不起作用。我知道这是一个基本问题,所以我希望有人见过这个并知道修复。谢谢!

3 个答案:

答案 0 :(得分:9)

您可以在此处使用字典将命名参数(using **)用作文档中的described,并直接为函数调用R.还要记住RPy2期望其own vector objects。是的,这有点尴尬,但从好的方面来说,你应该可以在R中做任何你可以用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中有一些更改,我还没有机会查看。)

答案 1 :(得分: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}

答案 2 :(得分: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函数签名中广泛使用省略号'...' 保存参数名称转换需要的事实 分析函数包含的R代码。

更多,以及执行系统翻译的功能示例 的'。'到'_'是: http://rpy.sourceforge.net/rpy2/doc-2.1/html/robjects.html#functions