Python и Rpy2: вызов функции plot с опциями, которые имеют "." в них - PullRequest
9 голосов
/ 24 января 2010

Я только начинаю изучать, как использовать rpy2 с python. Я умею делать простые графики и тому подобное, но я столкнулся с проблемой, что многие опции в R используют "." Например, вот вызов R, который работает:

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

где t - матрица.

Я хочу использовать тот же вызов в python, но он отклоняет "." часть names.arg. Насколько я понимаю, в Python вы заменяете "." с "_", например names_arg, но это тоже не работает. Я знаю, что это основная проблема, поэтому я надеюсь, что кто-то видел это и знает, как исправить. Спасибо!

Ответы [ 3 ]

9 голосов
/ 24 января 2010

Вы можете использовать здесь словарь для именованных аргументов (, используя **), как , описанный в документации, и вызывать 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 голос
/ 24 января 2010

Я не знаю, примет ли это 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 голосов
/ 26 января 2010

При использовании 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

...