diff --git a/r_user_meeting_scripts/reticulate_vignette.Rmd b/r_user_meeting_scripts/reticulate_vignette.Rmd new file mode 100644 index 0000000000000000000000000000000000000000..f35b03b14555f331b34128143743cbfe76a788bc --- /dev/null +++ b/r_user_meeting_scripts/reticulate_vignette.Rmd @@ -0,0 +1,127 @@ +--- +author: "Eva Rifà" +date: "01/02/2024" +output: rmarkdown::html_vignette +vignette: > + %\VignetteEngine{knitr::knitr} + %\VignetteIndexEntry{Data Storage and Retrieval} + %\usepackage[utf8]{inputenc} +--- + +Reticulate +----------------------------------------- + +The reticulate package provides a comprehensive set of tools for interoperability between Python and R. + +Reticulate embeds a Python session within your R session. It calls Python from R being able to translate objects within both packages. All the information can be found in the package documentation: https://rstudio.github.io/reticulate/. + +> NOTE: This script was used as an Ice-Breaker of the R User Meeting held at BSC on 4/5/2023. + +**How to use reticulate?** +There are a variety of ways to integrate Python code into R: +1. Importing Python modules +2. Sourcing Python scripts +3. Python REPL +4. Python in R Markdown (not shown in this file) + +### 1. Importing Python modules +The import() function can import any Python module and call it’s functions directly from R. + +#### Example I +```t +# Import modules in a terminal +module load matplotlib/3.2.2-foss-2015a-Python-3.7.3 +module load Python/3.7.3-foss-2015a +module load R/4.1.2-foss-2015a-bare +``` + +```r +library(reticulate) +``` +```r +matplotlib <- import("matplotlib") + +# Generate some data +x <- c(1, 2, 3, 4, 5) +y <- c(2, 4, 6, 8, 10) + +# Create a scatter plot using matplotlib +plt <- matplotlib$pyplot +plt$scatter(x, y) +plt$xlabel("X") +plt$ylabel("Y") +plt$title("Scatter Plot") +plt$savefig(fname = "plot1.png") +``` +#### Example II + +In the next example, we load the necessary modules in a terminal: +```t +# Import modules in a terminal +module load xarray/0.20.0-foss-2015a-Python-3.7.3 +# Other dependencies of xarray +module load netcdf4-python/1.5.3-foss-2015a-Python-3.7.3 +module load numpy/1.20.3-foss-2015a-Python-3.7.3 +``` +```r +library(reticulate) +# Example 2: Read Netcdf with xarray +xr <- import("xarray") + +obs_path <- "/esarchive/recon/ecmwf/erainterim/monthly_mean/tas_f6h/" +obs_file <- paste0(obs_path, "tas_201811.nc") + +obs <- xr$open_dataset(obs_file) + +obs +# +# Dimensions: (time: 1, lat: 256, lon: 512) +``` + +### 2. Sourcing Python scripts +The source_python() function can source a Python script the same way as source() an R script. Here, we first need to save a python script: + +```py +import matplotlib.pyplot as plt +import numpy as np + +# Data for plotting +t = np.arange(0.0, 2.0, 0.01) +s = 1 + np.sin(2 * np.pi * t) +fig, ax = plt.subplots() +ax.plot(t, s) +ax.set(xlabel = 'time (s)', ylabel = 'x (m)', + title = 'Created with R') +ax.grid() +fig.savefig("plot2.png") +``` +Then, we need to save the script. Let's call it ('test_reticulate_source.py'). + +Then, we source it from an R session: +```r +library(reticulate) + +source_python("test_reticulate_source.py") +``` + +### 3. Python REPL +The repl_python() function creates an interactive Python console within R. Objects you create within Python are available to your R session (and vice-versa). + +Inside an R session: +```r +library(reticulate) +repl_python() + +import matplotlib.pyplot as plt +import numpy as np + +# Data for plotting +t = np.arange(0.0, 2.0, 0.01) +s = 1 + np.sin(2 * np.pi * t) +fig, ax = plt.subplots() +ax.plot(t, s) +ax.set(xlabel = 'time (s)', ylabel = 'x (m)', + title = 'Created with R') +ax.grid() +fig.savefig("plot2.png") +``` \ No newline at end of file