Python und Rpy2: Aufruf Plot-Funktion mit Optionen, die in ihnen haben „“

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

  •  22-09-2019
  •  | 
  •  

Frage

Ich bin gerade erst zu lernen, wie rpy2 mit Python zu verwenden. Ich bin in der Lage einfache Plots und so zu machen, aber ich habe in das Problem führen, dass viele Optionen in R use „“. Zum Beispiel ist hier ein R Anruf, dass Werke:

  

BarPlot (t, col = heat.colors (2), names.arg = c ( "KFW", "pwn2"))

wobei t eine Matrix.

Ich möchte den gleichen Anruf in Python verwenden, aber es lehnt die „“ Teil names.arg. Mein Verständnis war, dass in Python Sie ersetzen die „“ mit „_“, so names_arg zum Beispiel, aber das funktioniert nicht. Ich weiß, das ein grundlegendes Problem ist, so dass ich hoffe, jemand gesehen hat und kennt die Lösung. Dank!

War es hilfreich?

Lösung

Sie können ein Wörterbuch verwenden hier für die genannten Argumente ( mit ** ) als beschrieben in der Dokumentation und R Anruf direkt für die Funktionen. Denken Sie auch daran, dass RPy2 erwartet von seinen eigenen Vektor-Objekte . Ja, es ist ein wenig umständlich, aber auf der positiven Seite, sollten Sie in der Lage sein, etwas in rpy2 tun Sie in R tun könnten.

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

(Beachten Sie, dass dies für rpy2 Version 2.0.x, es gibt einige Änderungen in der unreleased 2.1 die ich nicht die Chance hatte, in noch zu sehen.)

Andere Tipps

Ich weiß nicht, ob Rpy dies akzeptieren, aber Sie können Keyword-Parameter mit Perioden in ihnen haben. Sie haben sie durch ein Wörterbuch obwohl passieren. Wie folgt aus:

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

Mit rpy2-2.1.0, ein Weg zu schreiben, es wäre:

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

Mit Gebrauch barplot_default (eher, dass BarPlot) ist aufgrund der extensive Nutzung des Auslassungs ‚...‘ in R'sfunction Signaturen und die Tatsache, dass Übersetzung speichern Parameternamen erfordern würde Analyse des R-Code für eine Funktion enthält.

Mehr, und ein Beispiel für eine Funktion systematische Umsetzung auszuführen von '.' zu ‚_‘ ist unter: http://rpy.sourceforge.net/rpy2/doc- 2.1 / html / robjects.html # Funktionen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top