Python и Rpy2:Вызов функции plot с параметрами, в которых есть “.”

StackOverflow https://stackoverflow.com/questions/2125218

  •  22-09-2019
  •  | 
  •  

Вопрос

Я только начинаю изучать, как использовать 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top