class: center, middle, inverse, title-slide # Aplicaciones Web Interactivas 💻 con Shiny ✨ ## Meetup de R-Ladies Rcia-Ctes y R en el NEA ### Florencia D’Andrea (
@cantoflor_87
) ### R-Ladies Buenos Aires - R en Baires ### 21/02/2020 --- 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>. --- class: center, inverse, bottom background-image: url("Shiny_grande.jpg") background-position: 50% 50% ## Aplicaciones Web Interactivas con R --- # ¡Comencemos! Una Shiny App es una página web (UI) conectada a una computadora que ejecuta una sesión de R en vivo (Server) <img src="cheat1.png" width="50%" style="display: block; margin: auto;" /> -- Los usuarios pueden manipular la UI, lo cual lleva al server (_servidor_) a enviar una actualización de la UI exhibida (mediante ejecución de código en R). .footnote[Source: Guía Rápida Shiny - RStudio.] --- # App.R 📄 ```r library(shiny) # User interfase UI <- fluidPage( ) # Server Server <- function(input, output){ } # Combines UI and server shinyApp (ui = ui, server = server) ``` Podes insertar el template usando la plantilla precargada <img src="snippet_2.png" width="25%" style="display: block; margin: auto;" /> --- # Construyendo una Shiny app <img src="cheat1.png" width="50%" style="display: block; margin: auto;" /> .pull-left[ **UI** 1. Añadí la plantilla -> ***app.R*** 1. Selecciona una función de diseño (_layout_) 1. Selecciona y organiza los inputs ] .pull-right[ **Server** 1. Selecciona las funciones `render*()` y `*Output()` adecuadas 1. Referite a las salidas esperadas usando `output$<id>` 1. Referite a las entradas esperadas usando `input$<id>` ] --- # Ejecutá la Shinyapp 🎬 * Dale click al botón `Run App` en la barra de tareas. <img src="run_app.png" width="25%" style="display: block; margin: auto;" /> * Usa un atajo del teclado: Cmd/Ctrl + Shift + Enter. * Ejecuta `shiny::runApp()` incluyendo la ruta al archivo **app.R** .footnote[Source: https://mastering-shiny.org/basic-app.html] --- # Guía Rápida <img src="cheatsheet.png" width="80%" style="display: block; margin: auto;" /> .footnote[Source: https://shiny.rstudio.com/articles/cheatsheet.html] --- class: center, middle # User Interfase (UI) <img src="mamu_4.jpg" width="90%" style="display: block; margin: auto;" /> --- # Diseño Organiza los paneles y elementos dentro del diseño (_layout_) de UI que elegiste usando una **funcion de diseño** <img src="layout.png" width="90%" style="display: block; margin: auto;" /> .footnote[Source: Guía Rápida Shiny - RStudio.] --- class: center, middle <img src="slide_mamu1.png" width="100%" style="display: block; margin: auto;" /> `Ui <- fluidPage(sidebarLayout(sidebarPanel(…), mainPanel(…))` --- # Inputs Collect values from the user <img src="inputs.png" width="100%" style="display: block; margin: auto;" /> .footnote[Source: Guía Rápida Shiny - RStudio.] --- class: center, middle <img src="slide_mamu2.png" width="90%" style="display: block; margin: auto;" /> `Ui <- fluidPage(sidebarLayout(sidebarPanel(radioButtons(…)), mainPanel(…))` --- # Selección de inputs por el usuarie Argumentos de la función `radioButtons()` ```r radioButtons(inputId = `"axis_x"`, label = `"X"`, choices = c("Highway fuel economy (mpg)" = "hwy", "Engine displacement (L)" = "displ", "Car type" = "class")) ``` --- class: center, middle <img src="parentesis.png" width="90%" style="display: block; margin: auto;" /> --- class: center, middle # ⚠️ ¡Cuidado! Las familias pueden ser complejas <img src="complex.jpg" width="70%" style="display: block; margin: auto;" /> --- class: center, middle <img src="closing_par.png" width="90%" style="display: block; margin: auto;" /> --- class: center, middle <img src="mamu_8_sd.jpg" width="90%" style="display: block; margin: auto;" /> --- class: inverse # Demo #1 🙌💻 * Usa la plantilla de Shiny * Elegí un diseño e inputs * Ejecutá the App ➡️📁 **Rladies_app_es** --- class: center, middle # Reactivity <img src="mamu_2.jpg" width="100%" style="display: block; margin: auto;" /> --- <img src="server_react.png" width="40%" style="display: block; margin: auto;" /> .pull-left[ **UI** 1. Añadí la plantilla -> ***app.R*** 1. Selecciona una función de diseño (_layout_) 1. Selecciona y organiza los inputs ] .pull-right[ **Server** 1. Selecciona las funciones `render*()` y `*Output()` adecuadas 1. Referite a las salidas esperadas usando `output$<id>` 1. Referite a las entradas esperadas usando `input$<id>` ] --- # Funciones `render*()` y `*Output()` <img src="outputs.png" width="90%" style="display: block; margin: auto;" /> --- # Gráfico ```r library(ggplot2) ggplot(data = mpg)+ geom_point(mapping = aes(x = displ, y = hwy, color = class)) ``` <img src="rladies_shiny_2020_files/figure-html/plot1-1.png" style="display: block; margin: auto;" /> --- # Referite a las entradas usando `input$<id>` <img src="reactivity.png" width="90%" style="display: block; margin: auto;" /> --- # Referite a las entradas usando`input$<id>` <img src="reactivity3.png" width="90%" style="display: block; margin: auto;" /> --- # Referite a las salidas usando `output$<id>` <img src="reactivity.png" width="90%" style="display: block; margin: auto;" /> --- # Referite a las salidas usando `output$<id>` Observa las funciones `render*()` y `*Output()` <img src="reactivity_plot.png" width="90%" style="display: block; margin: auto;" /> --- <img src="slide_mamu3.png" width="90%" style="display: block; margin: auto;" /> --- class: center, middle # Extras <img src="mamu_1.jpg" width="70%" style="display: block; margin: auto;" /> --- # Agrega un tema <img src="shinythemes.png" width="70%" style="display: block; margin: auto;" /> --- # Agrega un título ```r *ui<- fluidPage(theme = shinytheme("lumen"), * h1(strong("R-Ladies Buenos Aires")), * h4(em("Shiny meetup")), sidebarLayout( sidebarPanel( radioButtons(…) ), mainPanel(… )) ``` <img src="header.png" width="609" style="display: block; margin: auto;" /> .footnote[Source: Shiny RStudio Cheatsheet.] --- # Incluí una imagen 1. Agrega el archivo de la imagen dentro de una carpeta llamada ***www*** 1. Agrega el siguiente código para posicionar la imagen en la UI `img(src="<file name>")` <img src="structure.png" width="90%" style="display: block; margin: auto;" /> --- class: inverse # Demo #2 🙌💻 * Servidor * Reactividad * Elección de tema y posicionamiento de la imagen * Ejecutar la app ➡️📁 *Rladies_app* --- class: inverse, center, middle <img src="appfinal.png" width="90%" style="display: block; margin: auto;" /> --- class: inverse, center, middle # Repo https://github.com/flor14/rladies_shiny_meetup_2020  --- class: inverse, center, middle # Ejemplos [RStudio Shiny Gallery](https://shiny.rstudio.com/gallery/) [Winners of the 1st Shiny Contest](https://blog.rstudio.com/2019/04/05/first-shiny-contest-winners/) --- class: inverse, center, middle # Links [Mastering Shiny](https://mastering-shiny.org/) [Shiny's Holy Grail - UseR! 2019 - Joe Cheng video](https://www.youtube.com/watch?v=5KByRC6eqC8) [Tutorial R-Studio](https://shiny.rstudio.com/tutorial) [Javascript for Shiny Users](https://github.com/rstudio-conf-2020/js-for-shiny) [Golem Package](https://github.com/ThinkR-open/golem) [Shinytest](https://rstudio.github.io/shinytest/articles/package.html) --- class: center, middle # ¡Muchas gracias! [Florencia](@cantoflor_87)  Slides created via the R package [**xaringan**](https://github.com/yihui/xaringan). The Template comes from [Allison Horst](https://remarkjs.com)