Python e Rpy2: Chiamare funzione plot con le opzioni che hanno in loro “”

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

  •  22-09-2019
  •  | 
  •  

Domanda

Sto solo cominciando a imparare a utilizzare rpy2 con Python. Sono in grado di fare trame semplici e simili, ma ho incontrato il problema che molte opzioni in uso R "". Ad esempio, ecco una chiamata R che funziona:

  

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

dove t è una matrice.

Voglio usare la stessa chiamata in python, ma respinge il "" parte di names.arg. La mia comprensione è che in python si sostituisce il "" con "_", così names_arg per esempio, ma che non funziona neanche. So che questo è un problema di base quindi spero che qualcuno ha visto questo e conosce la correzione. Grazie!

È stato utile?

Soluzione

È possibile utilizzare un dizionario qui per gli argomenti con nome ( utilizzando ** ) come descritto nella documentazione, e chiamare direttamente R per le funzioni. Ricorda inoltre che RPy2 aspetta che la sua oggetti propria vettoriale . Sì, è un po 'imbarazzante, ma il lato positivo, si dovrebbe essere in grado di fare nulla in rpy2 si potrebbe fare in R.

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

(Si noti che questo è per la versione 2.0.x rpy2, ci sono alcuni cambiamenti nel inedito 2.1 che non ho avuto la possibilità di guardare ancora.)

Altri suggerimenti

Non so se RPY accetterà questo, ma si può avere parametri di parole chiave con periodi in loro. Devi passare loro attraverso un dizionario però. In questo modo:

>>> 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, un modo per scrivere sarebbe:

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

Dovendo utilizzare barplot_default (piuttosto che barplot) è dovuta alla ampio uso di puntini di sospensione del '...' nelle firme R'sfunction e al fatto che salvare traduzione nome del parametro richiederebbe analisi del codice R una funzione contiene.

Più, e un esempio di una funzione per eseguire la conversione sistematica di '' a '_' e ': http://rpy.sourceforge.net/rpy2/doc- 2.1 / HTML / robjects.html # funzioni

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top