¿Qué es Shiny?
Es una librerĂa dentro de R que nos permite crear aplicaciones web interactivas utilizando cĂłdigo directamente del lenguaje de programaciĂłn R, sin necesidad de conocimientos avanzados en HTML, JavaScript o CSS. La librerĂa facilita el desarrollo de de aplicaciones web, permitiendo a los usuarios interactuar con el cĂłdigo de R en un navegador y mediante elementos de la interfaz de usuario como menĂșs desplegables o controles deslizantes.
Historia
Desde el 31 de Julio, 2012 siendo el primer lanzamiento de Shiny, la invenciĂłn de Joe Cheng actualmente CTO (Chief Technology Officer) en RStudio, ha ganado popularidad por su facilidad de uso y la potencia de aplicaciones que se pueden construir con dicha librerĂa. Sin embargo, cabe mencionar que Shiny no solo se aplica a R sino que tambiĂ©n ha sido creado para su uso con Python desde el 2022.
En los primeros años del desarrollo, Shiny estuvo cerca de convertirse en un framework de Interfaz de Usuario, un UI para R. La idea era que los usuarios pudieran construir interfaces grĂĄficas complejas directamente de R, como si fuera un sistema de diseño visual. El verdadero hallazgo de Shiny estuvo cuando se tomĂł la decisiĂłn de darle un enfoque distinto al uso de una tecnologĂa y dandose cuenta de que el verdadero valor estaba en dar poder a los cientificos de datos para comunicar sus hallazgos de forma interactiva, no en competir con desarrolladores web.
Crea paneles que monitoreen indicadores clave de rendimiento de alto nivel, facilitando a la vez el anålisis detallado de las métricas que requieren mayor investigación.
Reemplaza cientos de pĂĄginas de PDF con aplicaciones interactivas que permitan al usuario acceder directamente a la secciĂłn de resultados que le interesa.
Comunica modelos complejos a un pĂșblico no tĂ©cnico mediante visualizaciones informativas y anĂĄlisis de sensibilidad interactivos.
Ofrece anĂĄlisis de datos de autoservicio para flujos de trabajo comunes, reemplazando las solicitudes por correo electrĂłnico con una aplicaciĂłn Shiny que permite a los usuarios cargar sus propios datos y realizar anĂĄlisis estĂĄndar. Pon a disposiciĂłn de usuarios sin conocimientos de programaciĂłn anĂĄlisis avanzados de R.
Crea demostraciones interactivas para la enseñanza de conceptos de estadĂstica y ciencia de datos que permitan a los estudiantes modificar parĂĄmetros y observar los efectos de esos cambios en un anĂĄlisis.
install.packages ("Shiny")
IMPORTANTE! Shiny viene con otro paquete, llamado bslib en el que se construyen también interfaces gråficas.
Escribe este cĂłdigo en un script de R:
library(shiny)
runExample("01_hello")
La estructura de Shiny consta de:
Una funciĂłn del servidor
Un objeto de interfaz de usuario
Un llamado a la funciĂłn de Shinnyapp
A continuaciĂłn, se explican.
El objeto de interfaz de usuario controla el diseño y la apariencia de la aplicación.
library (shiny)
library (bslib)
UI <- page_sidebar (
title = "Anual Sales", #Titulo
sidebar = sidebar(
sliderInput( #Control deslizante
inputId = "bins",
label = "Histograma", #NĂșmero de columnas en un histograma
min = 2015, #Valor minimo en el histograma
max = 2026, #Valor mĂĄximo en el histograma
value = 2025 #Valor en el que aparece el histograma
)
),
plotOutput(outputId = "distPlot")
)
Contiene las instrucciones que la computadora necesita para compilar la aplicaciĂłn.
server <- function (input, output) {
output$distPlot <- renderPlot({
x <- faithful$waiting
bins <- seq(min(x), max(x), length.out = input$bins +1)
hist(x, breaks = bins, col = "#007bc2", border = "white",
xlab = "Waiting time to next eruption (in mins)",
main = "Histogram of waiting times")
})
}
Crea objetos de aplicaciĂłn Shiny a partir de un par explĂcito de interfaz de usuario/servidor.
library(shiny)
shinyApp(ui = ui, server = server)
Es importante saber que en Shiny podemos crear widgets de control que son de gran utilidad para la interfaz de usuario. Shiny incluye una serie de widgets predefinidos, cada uno creado con una funciĂłn R cuyo nombre es claro. Por decir 2 conocidas, actionbutton que crea un boton de acciĂłn y otra sliderInput que crea una barra deslizante.
A continuaciĂłn se brindan los widgets con su respectivo cĂłdigo (se debe recordar escribir la funciĂłn UI):
-actionButton
# Buttons
card(
card_header("Buttons"),
actionButton("action", "Action"),
submitButton("Submit")
),
# Single checkbox
card(
card_header("Single checkbox"),
checkboxInput("checkbox", "Choice A", value = TRUE)
),
# Checkbox group
card(
card_header("Checkbox group"),
checkboxGroupInput(
"checkGroup",
"Select all that apply",
choices = list("Choice 1" = 1, "Choice 2" = 2, "Choice 3" = 3),
selected = 1
)
),
card(
card_header("Date input"),
dateInput("date", "Select date", value = "2014-01-01")
),
-dateRangeInput
# Date range input
card(
card_header("Date range input"),
dateRangeInput("dates", "Select dates")
),
-FileInput
# File input
card(
card_header("File input"),
fileInput("file", label = NULL)
),
-helpText
# Help text
card(
card_header("Help text"),
helpText(
"Note: help text isn't a true widget,",
"but it provides an easy way to add text to",
"accompany other widgets."
)
),
Esto por mencionar algunas y se deberĂan ver asĂ.
Ahora bien, para agregar un objeto a la interfaz de usuario existen diversas opciones segĂșn se necesite.
Finalmente, existen funciones en la interfaz de usuario que le dicen a Shiny donde desplegar el objeto. Lo siguiente es decirle a Shiny como construir el objeto. Para esto, existen las siguientes funciones:
Finalmente, las aplicaciones shiny se pueden facilmente compartiendolas mediante un URL que se escribe asĂ:
library(shiny)
runUrl( "<the weblink>")