Python et Rpy2: Appel fonction de la parcelle avec des options qui ont en eux « »

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

  •  22-09-2019
  •  | 
  •  

Question

Je viens juste de commencer à apprendre à utiliser rpy2 avec python. Je suis en mesure de faire des parcelles simples et tel, mais j'ai rencontré le problème que beaucoup d'options dans l'utilisation de R « ». Par exemple, voici un appel R qui fonctionne:

  

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

où t est une matrice.

Je veux utiliser le même appel en python, mais il rejette le « » une partie de names.arg. Je crois comprendre que en python vous remplacez le « » avec « _ », donc names_arg par exemple, mais cela ne fonctionne pas non plus. Je sais que c'est un problème fondamental, donc j'espère que quelqu'un a vu cela et sait le correctif. Merci!

Était-ce utile?

La solution

Vous pouvez utiliser un dictionnaire ici pour les arguments nommés ( en utilisant ** ) comme décrit dans les documents, et d'appeler directement R pour les fonctions. Rappelez-vous aussi que RPy2 attend son propre vecteur objets . Oui, il est un peu maladroit, mais sur le côté positif, vous devriez être en mesure de faire quoi que ce soit à rpy2 que vous pourriez faire en R.

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

(Notez que ceci est pour la version 2.0.x rpy2, il y a quelques changements dans la unreleased 2.1 que je ne l'ai pas eu la chance de regarder encore.)

Autres conseils

Je ne sais pas si Rpy acceptera cela, mais vous pouvez avoir des paramètres de mots clés avec des périodes en eux. Vous devez les passer à travers un dictionnaire bien. Comme ceci:

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

Avec rpy2-2.1.0, une façon d'écrire serait:

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

Le fait de devoir utiliser barplot_default (plutôt que barplot) est due à la utilisation intensive des points de suspension « ... » dans les signatures et R'sfunction au fait que sauver la traduction du nom paramètre nécessiterait l'analyse du code d'une fonction R contient.

En savoir plus, et un exemple d'une fonction pour effectuer la traduction systématique de « » à « _ » est à: http://rpy.sourceforge.net/rpy2/doc- 2.1 / html / robjects.html # fonctions

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top