¿Cómo usar Python en R con paquete Reticulate en RMarkDown?

Ejemplo 01: Instalación en un trozo (chunks) de R

# Instalamos el paquete que permite usar python en R
install.packages("reticulate", dependecies = TRUE)

# Importamos el paquete
library(reticulate)

# Asegurarnos de usar la versión de python que queramos (podemos tener más de una versión instalada)
use_python("C:\\Users\\Alberto\\AppData\\Local\\Programs\\Python\\Python39\\python.exe", required = TRUE)

Ejemplo 02: Comprobar que estamos usando la versión de python que deseamos en un trozo (chunks) de R

# Importamos librería python y la asignamos a una variable
sys = import("sys")

# Usamos un método "version" de la librería sys con el operador "$"
print(sys$version)
[1] "3.9.8 (tags/v3.9.8:bb3fdcf, Nov  5 2021, 20:48:33) [MSC v.1929 64 bit (AMD64)]"
# Opcionalmente podemos ver más detalles con la función py_config()
py_config()
python:         C:/Users/Alberto/AppData/Local/Programs/Python/Python39/python.exe
libpython:      C:/Users/Alberto/AppData/Local/Programs/Python/Python39/python39.dll
pythonhome:     C:/Users/Alberto/AppData/Local/Programs/Python/Python39
version:        3.9.8 (tags/v3.9.8:bb3fdcf, Nov  5 2021, 20:48:33) [MSC v.1929 64 bit (AMD64)]
Architecture:   64bit
numpy:          C:/Users/Alberto/AppData/Local/Programs/Python/Python39/Lib/site-packages/numpy
numpy_version:  1.23.4
sys:            [builtin module]

NOTE: Python version was forced by RETICULATE_PYTHON
# Nota: Se puede instalar paquetes de python con la función py_install()
# pero crea un entorno virtual.  Se recomienda mejor instalar por consola las librerías
# con "pip install librería" y para listar lo instalado con "pip list"

Ejemplo 03: Crear una función de python en un script desde R

# Ir al menú File > New File > Python Script y guardarlo como "sumax.py"
# Lo dejamos en el misma carpeta de R en la que estemos trabajando

def sumax(a,b):
  return a+b

Ejemplo 04: Utilizar una función desde un script en python desde un trazo (chunks) desde R

# Importamos el script hacia R
source_python("sumax.py")

# Utilizamos directamente la función
print(sumax(2,3))
[1] 5

Ejemplo 05: Creamos una clase python y la guardamos como operaciones.py

# Ir al menú File > New File > Python Script > y creamos script "operaciones.py"
# Lo dejamos en la misma carpeta de R en que estemos trabajando

# Generamos una clase
class operaciones:
 
  def suma(self,a,b):
    return a + b

  def resta(self,a,b):
    return a - b

Ejemplo 06: Usamos una clase de python externa en un trozo (chunks) de R

# Cargamos la clase a una variable
source_python("operaciones.py")

# Instanciamos la clase
op = operaciones()

# Usamos el método suma
op$suma(2,4)
[1] 6
# Usamos el método resta
op$resta(2,4)
[1] -2

Ejemplo 07: Uso de la función py_run_file() en un trozo (chuks) de R

# Ir al menú File > New File > Python Script > y creamos script "ejemplo.py"
# Dentro ingresamos solo esta línea => my_var = "Esto es un ejemplo"

py_run_file("ejemplo.py")

# A través de py extraemos la variable traída desde python 
print(py$my_var)
[1] "Esto es un ejemplo"

Ejemplo 08: En un trazo (chunks) de python creamos un diccionario


# Nota: Queda desde de una única sesión para ser reutilizada.
diccionario = {"nombre":"alberto","pais":"chile"}

Ejemplo 09: En un trazo (chunks) de R nos traemos una variable de un trazo python

print(py$diccionario$pais)
[1] "chile"

Paso 10: Transformar variable de python a R en un trozo (chunks) de R

# Importamos la librería numpy y le pasamos conver FALSE para que no haga la transformación
# directa entre python y r
np = import("numpy", convert = FALSE)

# Generamos un vector de 1 a 4
x = np$array(c(1:4))

# Lo imprimimos por pantalla
print(x) 
array([1, 2, 3, 4])
# Lo transformamos python a R
py_to_r(x) 
[1] 1 2 3 4

Ejemplo 11: Exponemos dataframe de R a PYTHON a través de un trozo (chunks) de R

datos = iris
head(datos)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
datos_python = r_to_py(datos)

Ejemplo 12: Usamos la variable expuesta desde R a través de un trozo (chunks) de Python


# Con el objeto r podemos tener acceso a todas las variables de R a partir de fragmentos de python
r.datos_python.head()  
   Sepal.Length  Sepal.Width  Petal.Length  Petal.Width Species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa
MÁS INFORMACIÓN EN SU CHEAT SHEET