Come eseguire Python in R

Per quanto io ami R, è chiaro che Python è anche un ottimo linguaggio, sia per la scienza dei dati che per il calcolo generico. E ci possono essere buone ragioni per cui un utente R vorrebbe fare alcune cose in Python. Forse è un'ottima libreria che non ha (ancora) l'equivalente di R. O un'API a cui desideri accedere che abbia codice di esempio in Python ma non R.

Grazie al pacchetto R reticulate, puoi eseguire codice Python direttamente all'interno di uno script R e passare i dati avanti e indietro tra Python e R.

Oltre a reticolare, è necessario che Python sia installato sul sistema. Hai anche bisogno di moduli, pacchetti e file Python da cui dipende il tuo codice Python.

Se desideri seguire, installa e carica reticulate con  install.packages("reticulate")e library(reticulate).

Per semplificare le cose, iniziamo con solo due righe di codice Python per importare il pacchetto NumPy per il calcolo scientifico di base e creare un array di quattro numeri. Il codice Python ha questo aspetto:

importa numpy come np

my_python_array = np.array ([2,4,6,8])

Ed ecco un modo per farlo proprio in uno script R:

py_run_string ("importa numpy come np")

py_run_string ("my_python_array = np.array ([2,4,6,8])")

La py_run_string()funzione esegue qualunque codice Python sia racchiuso tra parentesi e virgolette. 

Se esegui quel codice in R, potrebbe sembrare che non sia successo nulla. Non viene visualizzato nulla nel riquadro dell'ambiente RStudio e non viene restituito alcun valore. Se corri print(my_python_array)in R, ottieni un errore che my_python_arraynon esiste.

Ma se esegui un   comando di stampa Python all'interno della py_run_string()funzione come 

py_run_string ("for item in my_python_array: print (item)")

dovresti vedere un risultato. 

Diventerà fastidioso eseguire codice Python riga per riga in questo modo, tuttavia, se hai più di un paio di righe di codice. Quindi ci sono alcuni altri modi per eseguire Python in R e reticolare.

Uno è mettere tutto il codice Python in un normale file .py e utilizzare la py_run_file()funzione. Un altro modo che mi piace è usare un documento R Markdown. 

R Markdown consente di combinare testo, codice, risultati del codice e visualizzazioni in un unico documento. È possibile creare un nuovo documento R Markdown in RStudio scegliendo File> Nuovo file> R Markdown.

I blocchi di codice iniziano con tre backtick ( ```) e terminano con tre backtick e hanno uno sfondo grigio per impostazione predefinita in RStudio.

Questa prima parte è per il codice R: puoi vederlo con il rdopo la parentesi di apertura. Carica il pacchetto reticulate e quindi si specifica la versione di Python che si desidera utilizzare. (Se non specifichi, utilizzerà il tuo sistema predefinito.)

```{r setup, include=FALSE, echo=TRUE}

library(reticulate)

use_python("/usr/bin/python")

```

La seconda parte di seguito è per il codice Python. Puoi digitare il Python come faresti in un file Python. Il codice seguente importa NumPy, crea una matrice e stampa la matrice.

`` {pitone}

importa numpy come np

my_python_array = np.array ([2,4,6,8])

per l'elemento in my_python_array:

stampa (articolo)

`` `

Ecco la parte interessante: puoi usare quell'array in R riferendoti ad esso come py$my_python_array(in generale, py$objectname).

In questo prossimo blocco di codice, memorizzo l'array Python in una variabile R chiamata my_r_array. E poi controllo la classe di quell'array.

`` {r}

my_r_array <- py $ my_python_array

class (my_r_array)

``

È un "array" di classe, che non è esattamente quello che ti aspetteresti da un oggetto R come questo. Ma posso trasformarlo in un vettore regolare con as.vector(my_r_array)ed eseguire qualsiasi operazione R mi piacerebbe, come moltiplicare ogni elemento per 2. 

`` {r}

my_r_vector <- as.vector (py $ my_python_array)

classe (my_r_vector)

my_r_vector <- my_r_vector * 2

`` `

La prossima parte interessante: posso usare quella variabile R in Python, come r.my_r_array(più in generale r.variablename), come 

`` {pitone}

my_python_array2 = r.my_r_vector

print (my_python_array2)

`` `

Se desideri vedere come appare senza configurare Python sul tuo sistema, guarda il video all'inizio di questa storia.