2010-01-23 5 views
9

Ich fange gerade an zu lernen, wie man rpy2 mit Python benutzt. Ich bin in der Lage, einfache Plots und so zu machen, aber ich habe das Problem, dass viele Optionen in R verwenden ".". Zum Beispiel, hier ist ein R-Aufruf, der funktioniert:Python und Rpy2: Aufruf der Plotfunktion mit Optionen, die "." in ihnen

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

wo t eine Matrix ist.

Ich möchte den gleichen Aufruf in Python verwenden, aber es lehnt das "." Teil von names.arg. Mein Verständnis war, dass du in Python das "." mit "_", also names_arg zum Beispiel, aber das funktioniert auch nicht. Ich weiß, dass dies ein grundlegendes Problem ist, also hoffe ich, dass jemand das gesehen hat und den Fehler kennt. Vielen Dank!

Antwort

8

können Sie ein Wörterbuch verwenden hier für die genannten Argumente (using **) als described in der Dokumentation, und rufen R direkt für die Funktionen. Denken Sie auch daran, dass RPy2 own vector objects erwartet. 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.

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 tun könnten, es gibt einige . Veränderungen in der unreleased 2.1, die ich nicht eine Chance sehen noch)

+0

Das funktioniert wie ein Zauber - danke! –

1

Ich weiß nicht, ob Rpy dies akzeptiert, aber Sie können Schlüsselwortparameter mit Perioden in ihnen haben. Sie müssen sie jedoch durch ein Wörterbuch führen. 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} 
+0

Dies ist wirklich hilfreich, vor allem mit Antwort 2 kombiniert. Alles jetzt behoben, danke! –

+0

In diesem Fall sollten Sie diese oder die andere Antwort als akzeptiert markieren. –

0

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

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 barplot_default zu verwenden (und nicht dieser Barplot) ist aufgrund der extensiven Verwendung der Ellipse '...' in den R-Funktionssignaturen ein d zu der Tatsache, dass die Übersetzung des Save-Parameter-Namens Analyse des R-Codes erfordern würde, die eine Funktion enthält.

Mehr, und ein Beispiel für eine Funktion zur Durchführung einer systematischen Übersetzung von '.' zu '_' ist um: http://rpy.sourceforge.net/rpy2/doc-2.1/html/robjects.html#functions