Python和Rpy2:调用具有"."的选项的绘图函数

9

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

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

其中t是一个矩阵。

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

3个回答

9
你可以在这里使用字典来代替命名参数(使用 **),如文档中所描述的,然后直接调用R函数。同时请记住,RPy2需要其自己的向量对象。是的,这有点尴尬,但好处是你应该能够在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;在未发布的2.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}

这真的很有帮助,特别是结合第二个答案一起使用。现在已经全部解决了,谢谢! - Andy Hall

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接