So führen Sie Python in R aus
So sehr ich R auch liebe, es ist klar, dass Python auch eine großartige Sprache ist - sowohl für die Datenwissenschaft als auch für das Allzweck-Computing. Und es kann gute Gründe geben, warum ein R-Benutzer einige Dinge in Python tun möchte. Vielleicht ist es eine großartige Bibliothek, die (noch) kein R-Äquivalent hat. Oder eine API, auf die Sie zugreifen möchten, die Beispielcode in Python, aber nicht R enthält.
Dank des R-Reticulate-Pakets können Sie Python-Code direkt in einem R-Skript ausführen und Daten zwischen Python und R hin und her übertragen.
Zusätzlich zum Retikulieren muss Python auf Ihrem System installiert sein. Sie benötigen auch alle Python-Module, -Pakete und -Dateien, von denen Ihr Python-Code abhängt.
Wenn Sie mitmachen möchten, installieren und laden Sie reticulate mit install.packages("reticulate")
und library(reticulate)
.
Beginnen wir zur Vereinfachung mit nur zwei Zeilen Python-Code, um das NumPy-Paket für grundlegende wissenschaftliche Berechnungen zu importieren und ein Array mit vier Zahlen zu erstellen. Der Python-Code sieht folgendermaßen aus:
importiere numpy als npmy_python_array = np.array ([2,4,6,8])
Und hier ist eine Möglichkeit, dies in einem R-Skript richtig zu machen:
py_run_string ("numpy als np importieren")py_run_string ("my_python_array = np.array ([2,4,6,8])")
Die py_run_string()
Funktion führt den Python-Code in Klammern und Anführungszeichen aus.
Wenn Sie diesen Code in R ausführen, sieht es möglicherweise so aus, als wäre nichts passiert. In Ihrem RStudio-Umgebungsbereich wird nichts angezeigt, und es wird kein Wert zurückgegeben. Wenn Sie print(my_python_array)
in R ausführen , wird ein Fehler angezeigt, my_python_array
der nicht vorhanden ist.
Wenn Sie jedoch einen Python- Druckbefehl innerhalb der py_run_string()
Funktion ausführen, z
py_run_string ("für Element in my_python_array: print (Element)")
Sie sollten ein Ergebnis sehen.
Wenn Sie mehr als ein paar Codezeilen haben, wird es jedoch ärgerlich, Python-Code Zeile für Zeile auszuführen. Es gibt also einige andere Möglichkeiten, Python in R auszuführen und zu retikulieren.
Eine besteht darin, den gesamten Python-Code in eine reguläre .py-Datei einzufügen und die py_run_file()
Funktion zu verwenden. Eine andere Möglichkeit, die ich mag, ist die Verwendung eines R-Markdown-Dokuments.
Mit R Markdown können Sie Text, Code, Codeergebnisse und Visualisierungen in einem einzigen Dokument kombinieren. Sie können ein neues R-Markdown-Dokument in RStudio erstellen, indem Sie Datei> Neue Datei> R-Markdown wählen.
Code-Chunks beginnen mit drei Backticks ( ```
) und enden mit drei Backticks. In RStudio haben sie standardmäßig einen grauen Hintergrund.
Dieser erste Block ist für R-Code bestimmt - das sehen Sie an r
der Klammer nach dem Öffnen. Es lädt das Reticulate-Paket und gibt dann die Version von Python an, die Sie verwenden möchten. (Wenn Sie nichts angeben, wird Ihr Systemstandard verwendet.)
```{r setup, include=FALSE, echo=TRUE}
library(reticulate)
use_python("/usr/bin/python")
```
Dieser zweite Teil unten ist für Python-Code. Sie können Python wie in eine Python-Datei eingeben. Der folgende Code importiert NumPy, erstellt ein Array und druckt das Array.
`` `{Python}importiere numpy als np
my_python_array = np.array ([2,4,6,8])
für Element in my_python_array:
drucken (Artikel)
`` `
Hier ist der coole Teil: Sie können dieses Array in R verwenden, indem Sie es als py$my_python_array
(im Allgemeinen py$objectname
) bezeichnen.
In diesem nächsten Codeblock speichere ich dieses Python-Array in einer R-Variablen namens my_r_array
. Und dann überprüfe ich die Klasse dieses Arrays.
`` `{r}my_r_array <- py $ my_python_array
Klasse (my_r_array)
``
Es ist ein Klassenarray, das nicht genau das ist, was Sie für ein R-Objekt wie dieses erwarten würden. Aber ich kann es in einen regulären Vektor verwandeln as.vector(my_r_array)
und alle R-Operationen ausführen, die ich möchte, z. B. jedes Element mit 2 multiplizieren.
`` `{r}my_r_vector <- as.vector (py $ my_python_array)
Klasse (my_r_vector)
my_r_vector <- my_r_vector * 2
`` `
Nächster cooler Teil: Ich kann diese R-Variable wieder in Python verwenden, wie r.my_r_array
(allgemeiner r.variablename
), wie z
`` `{Python}my_python_array2 = r.my_r_vector
print (my_python_array2)
`` `
Wenn Sie sehen möchten, wie dies aussieht, ohne Python auf Ihrem System einzurichten, sehen Sie sich das Video oben in dieser Geschichte an.