Python и Rpy2:Вызов функции plot с параметрами, в которых есть “.”
Вопрос
Я только начинаю изучать, как использовать rpy2 с python.Я могу создавать простые графики и тому подобное, но я столкнулся с проблемой, которую используют многие опции в R ".".Например, вот вызов R, который работает:
гистограмма (t, col=тепло.цвета (2), имена.arg=c("pwn", "pwn2"))
где t - матрица.
Я хочу использовать тот же вызов в python, но он отклоняет "." часть names.arg.Насколько я понимаю, в python вы заменяете "." на "_", например, names_arg, но это тоже не работает.Я знаю, что это основная проблема, поэтому я надеюсь, что кто-то видел это и знает, как это исправить.Спасибо!
Решение
Вы можете использовать словарь здесь для именованных аргументов (используя **) как описанный в документах и вызывайте 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 на который у меня еще не было возможности взглянуть.)
Другие советы
Я не знаю, примет ли это 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 и тем фактом, что для преобразования имени параметра сохранения потребуется анализ R-кода, содержащегося в функции.
Подробнее, и пример функции для выполнения систематического перевода из '.' в '_' находится в:http://rpy.sourceforge.net/rpy2/doc-2.1/html/robjects.html#functions