Se debe instalar el paquete reticulate y cargar su libreria con el mismo nombre

# --- R ---

library(reticulate)

Despues tenemos que fijar el directorio donde tengamos Python. En mi caso uso el environment Anaconda.

# --- R ---

use_condaenv("C:/Users/Usuario/anaconda3/python.exe")

Ahora ya se puede ejecutar codigo de Python, pero solo en chunks de python, es decir, en chunks que empiezan con ```{python}

# --- PYTHON ---

a = "Hola " + "Mundo"
print(a)
## Hola Mundo

Si ejecutamos un codigo de Python en un chunk de R, es decir, en un chunk que empieza por ```{r} , obtenemos un error.

# --- R ---

# b = "Hola " + "Mundo"
# print(b)

# Si se ejecuta sale error porque estamos usando lenguaje Python dentro de un chunk de R

Podemos acceder a los objetos creados con Python desde un chunk de R con la instruccion py$

# --- R ---

py$a
## [1] "Hola Mundo"

Podemos equivalentemente acceder a los objetos creados en R desde un chunk de Python con instruccion r.

# --- R ---

b="ey chavales"
# --- PYTHON ---

r.b
## 'ey chavales'

Podemos cargar librerias de Python usando un chunk de R del siguiente modo

# --- R ---

# py_install("pandas")

# py_install("numpy")

# py_install("scipy")


Vamos a hacer un ejemplo de una analisis estadistico mezclando el uso de Python y R. Esta es la principal utilidad de reticulete, nos permite hacer analisis con R y Python simultaneamente

# --- PYTHON ---

# Tratamiento de datos
import pandas as pd
import numpy as np

# Gráficos
import matplotlib.pyplot as plt
from matplotlib import style
import seaborn as sns

# Preprocesado y modelado
from scipy.stats import pearsonr
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error
import statsmodels.api as sm
import statsmodels.formula.api as smf

# Configuración matplotlib

plt.rcParams['image.cmap'] = "bwr"
#plt.rcParams['figure.dpi'] = "100"
plt.rcParams['savefig.bbox'] = "tight"
style.use('ggplot') or plt.style.use('ggplot')

# Configuración warnings

import warnings
warnings.filterwarnings('ignore')
# --- PYTHON ---

# Datos

equipos = ["Texas","Boston","Detroit","Kansas","St.","New_S.","New_Y.",            "Milwaukee","Colorado","Houston","Baltimore","Los_An.","Chicago",           "Cincinnati","Los_P.","Philadelphia","Chicago","Cleveland","Arizona", "Toronto","Minnesota","Florida","Pittsburgh","Oakland","Tampa",           "Atlanta","Washington","San.F","San.I","Seattle"]
           
bateos = [5659,  5710, 5563, 5672, 5532, 5600, 5518, 5447, 5544, 5598, 5585, 5436, 5549, 5612, 5513, 5579, 5502, 5509, 5421, 5559,           5487, 5508, 5421, 5452, 5436, 5528, 5441, 5486, 5417, 5421]

runs = [855, 875, 787, 730, 762, 718, 867, 721, 735, 615, 708, 644, 654, 735, 667, 713, 654, 704, 731, 743, 619, 625, 610, 645, 707, 641, 624, 570, 593, 556]

datos = pd.DataFrame({'equipos': equipos, 'bateos': bateos, 'runs': runs})

datos.head(3)
##    equipos  bateos  runs
## 0    Texas    5659   855
## 1   Boston    5710   875
## 2  Detroit    5563   787
# --- R ---

py$datos[1:7, ]
equipos bateos runs
Texas 5659 855
Boston 5710 875
Detroit 5563 787
Kansas 5672 730
St. 5532 762
New_S. 5600 718
New_Y. 5518 867
# --- R ---

library(ggplot2)

ggplot(data = py$datos, aes( x=bateos, y=runs) )+
  geom_point()

# --- PYTHON ---

# División de los datos en train y test
# ==============================================================================
X = datos[['bateos']]
y = datos['runs']

X_train, X_test, y_train, y_test = train_test_split(
X.values.reshape(-1,1),  y.values.reshape(-1,1), train_size   = 0.8,  random_state = 1234, shuffle = True  )

# Creación del modelo
# ==============================================================================
modelo =  LinearRegression()
modelo.fit(X = X_train.reshape(-1, 1), y = y_train)
## LinearRegression()
# --- PYTHON ---

# Información del modelo
# ==============================================================================
print("Intercept:", modelo.intercept_)
## Intercept: [-2367.7028413]
print("Coeficiente:", list(zip(X.columns, modelo.coef_.flatten(), )))
## Coeficiente: [('bateos', 0.5528713534479736)]
print("Coeficiente de determinación R^2:", modelo.score(X, y))
## Coeficiente de determinación R^2: 0.3586119899498744
# --- PYTHON ---

corr_test = pearsonr(x = datos['bateos'], y =  datos['runs'])

print("Coeficiente de correlación de Pearson: ", corr_test[0])
## Coeficiente de correlación de Pearson:  0.6106270467206687