class: center, middle, inverse, title-slide # Reproducibilidad en R ## Compartiendo entornos interactivos con Binder ### Florencia D’Andrea ### 2020-09-03 --- class: center, middle # Licencia <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a> --- # Desafío Te comparto este código en el que estoy trabajando ¿te funciona? Abre el proyecto -> [](https://mybinder.org/v2/gh/flor14/reproducibilidad_meetup/master?urlpath=rstudio) -- **Problema 1** Ruta de archivo absoluta -- **Problema 2** Versión del paquete `tidyr 0.8.3` no incluye `pivot_longer()` y `pivot_wider()` , funciones que recién se agregan en la versión 1.0.0 --- class: inverse, center, middle # ¿Fue suficiente compartir el código y los datos para que mi análisis fuese reproducible? --- class: center, middle, inverse # Entornos computacionales --- ## Hay varias formas de capturar entornos computacionales * Sistemas de administración de paquetes (📦 `packrat` - 📦 `renv`) * Binder * Máquinas virtuales * Contenedores -- .footnote[[Más info aquí -> The Turing Way](https://www.turing.ac.uk/research/research-projects/turing-way-handbook-reproducible-data-science)] --- class: center # Sistema de administración de dependencias **Paquete `renv`** <!-- --> .footnote[[Entornos Reproducibles - RStudio](https://environments.rstudio.com/)] --- # Paquete `renv` - 🏁 `renv::init()` Se crea una librería asociada al proyecto dentro de la carpeta `renv`. -- - 📸 `renv::snapshot()` Genera el archivo `renv.lock` con información de las dependencias al momento de hacer la instantánea (snapshot). -- - 🌱 `renv::restore()` reproduce el entorno! .footnote[[* Lee más sobre `renv` aquí](https://environments.rstudio.com/snapshot.html#pre-requisite-steps)] --- class: center # Binder [Jupyter Notebooks](https://mybinder.org/v2/gh/binder-examples/r/master?filepath=index.ipynb) [Shiny](https://mybinder.org/v2/gh/flor14/shiny_reproducibilidad_meetup/master?urlpath=shiny/elipse/) [RStudio](http://mybinder.org/v2/gh/flor14/shiny_reproducibilidad_meetup/master?urlpath=rstudio) [Tutorial 1 - Ines Montani](https://noamross.github.io/gams-in-r-course/) [Tutorial 2 - LearnR](https://mybinder.org/v2/gh/syoh/learnr-tutorial/master?urlpath=shiny/test1/) --- # Binder Binder es un servicio web open source que permite a los usuarios crear entornos interactivos y reproducibles en la nube. <!-- --> --- .pull-left[ ## Beneficios - Es relativamente fácil de usar - Podes acceder a la información con solo un click - Es gratuito ] .pull-right[ ## Limitaciones - Potencia computacional - Seguridad/privacidad (si usan mybinder.org) - Tarda en cargar ] --- class: inverse, middle, center ## ☁💻☁ ### El objetivo de Binder es reducir la barrera a la interactividad y permitir utilizar código alojado en proveedores de repositorios como GitHub. --- # mybinder.org [mybinder.org](mybinder.org) es una implementación de la tecnología BinderHub. Se administra como un **servicio público** para aquellos que deseen compartir sus **repositorios interactivos**. <!-- --> --- ## "Binderizando" tu proyecto 🌀 **1-** Especificar el entorno computacional ➕📄 **intall.R** ➕📄 **runtime.txt** -- **2-** Subir los archivos del proyecto en algún repositorio público 🗂 Por ejemplo: **GitHub o GitLab** -- **3-** "Binderizar" el proyecto (**mybinder.org**) ⏳ -- **4-** Usar la URL correcta 🔗 --- class: middle, center, inverse ## ☁💻☁ # Demo --- ## ➕📄 `install.R` > Este archivo debe contener una lista de todos los paquetes a ser instalados ```r install.packages("ggplot2") install.packages("shiny") ``` --- # ¿Qué es MRAN? 📷 Desde el 17 de septiembre de 2014, el servidor `checkpoint` toma una instantánea diaria 📸 a la medianoche UTC de todo el repositorio de CRAN y la almacena en [Microsoft R Archived Network (MRAN)](https://mran.microsoft.com/documents/rro/reproducibility#reproducibility). -- > ⚠ Los paquetes que no esta en CRAN, como los que estas disponibles solo en GitHub no son accesibles desde MRAN. -- .footnote[[MRAN](https://mran.microsoft.com/)] --- # EXTRA: Paquete `checkpoint` ⏱ El paquete `checkpoint` me permite recuperar las versiones en el repositorio de CRAN para un determinado día. ```r library(checkpoint) checkpoint("YYYY-MM-DD") ``` .footnote[[Checkpoint](https://mran.microsoft.com/documents/rro/reproducibility#checkpointpkg)] --- # ➕📄 `runtime.txt` > Especifica la versión de R y de los paquetes usados. Para esto debes elegir una fecha dónde las versiones de tus paquetes estan capturadas en MRAN. **`r-version-<YYYY>-<MM>-<DD>`** [*Lee acá información importante sobre las versiones de R que soporta Binder*](https://github.com/binder-examples/r) --- # ➕📄 `runtime.txt` ```r r-3.6-2019-01-20 ```  --- # 2. Sube tu código al repositorio <!-- --> --- # 3. "Binderiza" tu proyecto 🌀 a. Dirígete a https://mybinder.org -- b. Pega la URL del repositorio de GitHub del proyecto `https://github.com/<usuario>/<repositorio>` -- c. Finalmente, haz clic en el botón de LAUNCH. Esto le pedirá a mybinder.org que cree el entorno necesario para ejecutar el proyecto. <!-- --> --- class: center, middle, inverse # ¡Paciencia! Esto lleva un rato ⏳ --- # URL para RStudio IDE 💻 ➕**`?urlpath=rstudio`** `https://mybinder.org/v2/gh/<usuario>/<repositorio>/<rama>?urlpath=rstudio` 🔗 ejemplo: http://mybinder.org/v2/gh/flor14/shiny_reproducibilidad_meetup/master?urlpath=rstudio .footnote[[Ejemplos en el repositorio de Binder](https://github.com/binder-examples/r)] --- # URL para Shiny app ✨ ➕**`?urlpath=shiny/<carpeta>/`** `https://mybinder.org/v2/gh/<usuario>/<repositorio>/<rama>?urlpath=shiny/<carpeta>/` 🔗 ejemplo de mi app: https://mybinder.org/v2/gh/flor14/shiny_reproducibilidad_meetup/master?urlpath=shiny/elipse/ .footnote[[Ejemplos en el repositorio de Binder](https://github.com/binder-examples/r)] --- # Tutoriales 💻👩 * [Ines Montani](https://github.com/ines/course-starter-r) * [LearnR - Sang-Yun Oh blog post](https://syoh.org/learnr-tutorial/) --- # Algo más ✅ Paquete [Holepunch](https://karthik.github.io/holepunch/articles/getting_started.html) ✅ Instalación más rápida [r-conda](https://github.com/binder-examples/r-conda) ✅ [Más info sobre Binder](https://mybinder.readthedocs.io/en/latest/faq.html) -- 🐳 Cambios en términos de servicio de Docker el 1 de Noviembre. Falta de actividad por 6 meses podría dejar links inactivos. ❓discourse.jupyter.org --- class: inverse, middle, center # ¡Practiquemos! 💪 --- # Ejercicio  --- class: inverse # Links 🔗 * [Binder 2.0 - Reproducible, interactive, sharable environments for science at scale](https://pdfs.semanticscholar.org/c043/bef741a9616d1144e0205ac21ceae881485d.pdf) * [Reproducibility in Production - Webinar](https://rstudio.com/resources/webinars/reproducibility-in-production/) * [The Turing Way Book](https://the-turing-way.netlify.app/) * [Reproducible Environments - RStudio](https://environments.rstudio.com/) * [renv: Project Environments with R - RStudio blog](https://blog.rstudio.com/2019/11/06/renv-project-environments-for-r/) * [Putting the R into Reproducible Research - Anna Krystalli](https://annakrystalli.me/talks/r-in-repro-research.html#1) * [Demo renv package](https://environments.rstudio.com/snapshot.html#watch-a-video-demo-of-snapshot-and-restore-with-renv) --- class: center, middle # ♻ # ¡Muchas gracias! Web [florencia.netlify.app](florencia.netlify.app) Twitter [@cantoflor87](twitter.com/cantoflor_87)