Python y Rpy2: Llamar a la función parcela con opciones que tienen en ellos “”

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

  •  22-09-2019
  •  | 
  •  

Pregunta

Me estoy empezando a aprender a utilizar rpy2 con Python. Soy capaz de hacer gráficos simples y tal, pero me he encontrado con el problema de que muchas opciones en el uso de R "". Por ejemplo, aquí hay una llamada R que las obras:

  

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

donde t es una matriz.

Quiero usar la misma llamada en Python, pero rechaza el "" parte de names.arg. Mi entendimiento es que en Python que sustituya el "" por "_", por lo names_arg por ejemplo, pero que no está funcionando bien. Sé que esto es un problema sencillo, así que espero que alguien ha visto esto y conoce la solución. Gracias!

¿Fue útil?

Solución

Puede utilizar un diccionario aquí por los argumentos con nombre ( usando ** ) como describe en la documentación, y llamada R directamente para las funciones. Asimismo, recuerda que RPy2 espera que su propio vector objetos . Sí, es un poco incómodo, pero en el lado positivo, que debe ser capaz de hacer cualquier cosa en rpy2 que podría hacer en I.

from rpy2 import robjects
color = robjects.r("heat.colors")()
names = robjects.StrVector(("pwn", "pwn2"))
robjects.r.barplot(t, col=color, **{"names.arg":names})

(Tenga en cuenta que esto es para la versión 2.0.x rpy2, hay algunos cambios en el inéditas 2.1 que no he tenido la oportunidad de mirar todavía.)

Otros consejos

No sé si RPY aceptará esto, pero se puede tener parámetros de palabras clave con períodos en los mismos. Usted tiene que pasar a través de un embargo diccionario. De esta manera:

>>> 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}

Con rpy2-2.1.0, una forma de escribir que sería:

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")))

tener que usar barplot_default (en lugar de que barplot) se debe a la un amplio uso de los puntos suspensivos '...' en las firmas y R'sfunction al hecho de que el nombre del parámetro Guardar traducción requeriría análisis del código R una función contiene.

Más, y un ejemplo de una función para realizar la traducción sistemática de ''. a '_' se encuentra en: http://rpy.sourceforge.net/rpy2/doc- 2,1 / html / robjects.html # funciones

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top