Python和Rpy2:调用带有“.”的选项的绘图函数

2024-10-01 07:30:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始学习如何在python中使用rpy2。我能画出简单的曲线图之类的,但我遇到了一个问题:R中的许多选项都使用“.”。例如,这里有一个有效的R调用:

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

其中t是矩阵。在

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


Tags: 名称names选项arg矩阵col命名pwn
3条回答

您可以在这里为命名参数(using **)使用字典作为文档中的described,并为函数直接调用R。{RPy2}也期望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;在unreleased 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's函数签名和 保存参数名转换需要 函数所包含的R代码的分析。在

更多,以及一个执行系统翻译功能的例子 “.”到''uu'的位置: http://rpy.sourceforge.net/rpy2/doc-2.1/html/robjects.html#functions

相关问题 更多 >