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 np

my_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_arrayder 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 rder 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.