9

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

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

其中 t 是一个矩阵。

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

4

3 回答 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中有一些我还没有机会查看的更改。)

于 2010-01-24T03:13:26.870 回答
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}
于 2010-01-24T00:34:02.067 回答
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

于 2010-01-26T19:27:00.407 回答