# Instalación de shiny
install.packages("shiny")
# Instalación de rsconnect,
# para conectarse a shinyapps.io, RStudio Connect y otras plataformas similares
install.packages("rsconnect")
11 Shiny - paquete para desarrollo de aplicaciones interactivas
11.1 Trabajo previo
11.1.1 Lecturas
Moraga, P. (2019). Geospatial Health Data: Modeling and Visualization with R-INLA and Shiny (capítulos 13 y 14). Chapman & Hall/CRC. https://www.paulamoraga.com/book-geospatial/
Quarto - Shiny. (s. f.). Recuperado 20 de noviembre de 2022, de https://quarto.org/docs/interactive/shiny/
11.2 Resumen
Este capítulo trata sobre el paquete Shiny, para desarrollo de aplicaciones interactivas.
11.3 Instalación y carga
# Carga de shiny
library(shiny)
# Carga de rsconnect
library(rsconnect)
11.4 Características generales
En una aplicación interactiva, el usuario puede configurar las salidas, usualmente mediante una interfaz que le permite realizar operaciones como filtros, búsquedas y ordenamientos, entre otras. Shiny es un paquete de R que facilita el desarrollo de este tipo de aplicaciones.
Las aplicaciones Shiny requieren un servidor, el cual es un proceso que puede alojarse en cualquier computador habilitado para ejecutar código en R como, por ejemplo, la estación de trabajo del programador (esta opción se usa principalmente para efectos de desarrollo y pruebas), un servidor ubicado en la red de una organización o un servidor en la nube (ej. shinyapps.io, RStudio Connect).
Para ejemplos de aplicaciones Shiny, puede visitar la siguiente galería.
11.5 Arquitectura de una aplicación Shiny
Una aplicación Shiny tiene dos componentes principales:
- Interfaz de usuario: despliega controles de entrada y salida (widgets), los cuales eventualente convierte a Lenguaje de Marcado de Hipertexto (HTML).
- Widgets de entrada: campos de texto, listas de selección, botones de radio, etc.
- Widgets de salida: tablas, gráficos, mapas, etc. Muchos de estos controles están incluídos en los paquetes que generan los diferentes tipos de salidas (ej. DT, plotly, leaflet).
- Servidor: es un proceso que recibe las entradas y realiza el procesamiento necesario para generar las salidas.
Para más información sobre la arquitectura de aplicaciones Shiny, se recomienda leer The Anatomy of a Shiny Application.
11.6 Ejemplo de aplicación Shiny
El siguiente documento Quarto contiene una aplicación Shiny que muestra la distribución de la duración de los intervalos de tiempo entre erupciones del géiser “Old Faithful”.
---
title: "Old Faithful"
format: html
server: shiny
---
```{r}
#| label: interfaz-usuario
# Este bloque de código dibuja la interfaz de usuario,
# tanto los controles de entrada como los de salida
# Widget de tipo "slider" para entrada de datos
sliderInput(inputId = "bins",
label = 'Cantidad de "bins" del histograma:',
min = 1, max = 50, value = 30)
# Gráfico de salida
plotOutput(outputId = "histograma")
```
```{r}
#| label: servidor
#| context: server
# Este bloque realiza el procesamiento en el servidor.
# Generación del gráfico de salida
$histograma <- renderPlot({
output# Vector con datos de duración de intervalos entre erupciones
<- faithful[, 2]
x
# "Bins" del histograma
<- seq(from = min(x), to = max(x), length.out = input$bins + 1)
bins
# Histograma
hist(x = x,
breaks = bins,
main = 'Distribución de duración de intervalos entre erupciones',
xlab = "Duración de intervalos (min)",
ylab = "Frecuencia",
col = 'darkgray',
border = 'white')
})```
Es de vital importancia comprender que los dos bloques de código del ejemplo anterior se ejecutan en sesiones de R completamente separadas. Esto implica que no es posible, en principio, acceder desde el primer bloque variables definidas en el segundo, ni viceversa. Sin embargo, existen varias estrategias para compartir código, como las que se detallan en Sharing Code.
Por otra parte, hay diferencias importantes entre este documento y otros documentos Quarto:
La opción
server: shiny
: en la sección YAML, la cual le indica a Quarto que debe iniciar un servidor Shiny.La opción
context: server
: en el segundo bloque de código, la cual indica que ese bloque debe ejecutarse en el servidor.
Existen otras opciones para los bloques de código en aplicaciones Shiny:
context: setup
: para operaciones iniciales (ej. carga de bibliotecas).context: data
: para datos que se desea compartir entre los bloques de código.
11.7 Ejercicios
Ejecute en su computadora el código de la aplicación “Old Faithful” mostrado anteriormente.
- Cree un proyecto en RStudio (puede hacerlo a partir de un repositorio en GitHub).
- Cree un documento Quarto.
- Copie en el nuevo documento el código de la aplicación “Old Faithful”.
- Ejecute el documento con el botón
Run Document
.
Publique la aplicación “Old Faithful” en shinyapps.io (puede consultar Quarto - Running Documents y How to Deploy R Shiny App for Free on Shinyapps.io).
- Cree una cuenta en shinyapps.io.
- Obtenga su token de autenticación de shinyapps.io en Accounts - Tokens - Show- Show secret - Copy to clipboard.
- Ejecute la aplicación en su computadora y publíquela en shinyapps.io con el botón Publish. Elija la opción shinyapps.io e ingrese el token cuando se le solicite. Debe seleccionar todos los archivos requeridos para que su aplicación funciones (datos, imágenes, etc.).
Ejecute en su computadora y luego publique en shinyapps.io la aplicación Iris K-Means Clustering.
Estudie el resto de los ejemplos en Quarto - Shiny - Examples.
Cree una aplicación Shiny para el conjunto de datos de registros de presencia de felinos de Costa Rica, y publíquela en shinyapps.io, con los siguientes componentes:
- Una lista de selección de especies.
- Una tabla DT que muestre los registros de la especie seleccionada en la lista.
- Un gráfico ggplot2-plotly de barras que muestre la cantidad de registros por mes de la especie seleccionada en la lista.
- Un mapa leaflet que muestre la ubicación de los registros de la especie seleccionada en la lista.
Puede encontrar una solución parcial en https://github.com/pf0953-programacionr/2022-ii-felinos-shiny.
11.8 Recursos de interés
Quarto - Running Documents. (s. f.). Recuperado 20 de noviembre de 2022, de https://quarto.org/docs/interactive/shiny/running.html
Shiny. (s. f.). Recuperado 20 de noviembre de 2022, de https://shiny.rstudio.com/
Shiny - Gallery. (s. f.). Recuperado 20 de noviembre de 2022, de https://shiny.rstudio.com/gallery/
The Anatomy of a Shiny Application | R-bloggers. (2021). Recuperado 21 de noviembre de 2022, de https://www.r-bloggers.com/2021/04/the-anatomy-of-a-shiny-application/
1littlecoder. (2020). How to Deploy R Shiny App for Free on Shinyapps.io. https://www.youtube.com/watch?v=2QstfyGX4ZU