Shiny: crear una aplicación web interactiva (apps) desde R.

This post was kindly contributed by Ecología estadística - go there to comment and to read the full post.

Shiny: resultados interactivos o programación reactiva.

¿Qué es Shiny?

Shiny es una herramienta para crear fácilmente aplicaciones web interactivas (apps) que permiten a los usuarios interactuar con sus datos sin tener que manipular el código.
La programación Reactiva enfatiza el uso de:
  • Valores que cambian en el tiempo
  • Expresiones que registran esos cambios
  • Ver el ejemplo que hemos publicado en este mismo blog.

¿Necesito ser un programador web para su uso?

No hace falta conocimiento de HTML o JavaScript, solo conocer R.

¿Para qué sirve?

La programación Reactiva enfatiza el uso de: 
  • Valores que cambian en el tiempo
  • Expresiones que registran esos cambios

Hagamos un ejemplo

Lo primero que se necesita es instalar el paquete:
install.packages("shiny")

Para obtener un ejemplo sencillo de Shiny podemos "correr" el ejemplo "Hola Shiny" que realiza unhistograma y permite a los usuarios cambiar el número de intervalos en el gráfico.

library(shiny)
runExample("01_hello")

La aplicación tiene 2 componentes:
  1. una secuencia de comandos de interfaz de usuario (UI, archivo ui.R), que controla el diseño y aspecto de la aplicación.
  2. una secuencia de comandos del servidor (server.R), que contiene las instrucciones que su equipo necesita para construir su aplicación.

En este ejemplo:

ui.R

library(shiny)

# Define UI for application that draws a histogram
shinyUI(fluidPage(

# Application title
titlePanel("Hello Shiny!"),

# Sidebar with a slider input for the number of bins
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30)
),

# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
)
))

server.R

library(shiny)

# Define server logic required to draw a histogram
shinyServer(function(input, output) {

# Expression that generates a histogram. The expression is
# wrapped in a call to renderPlot to indicate that:
#
# 1) It is "reactive" and therefore should re-execute automatically
# when inputs change
# 2) Its output type is a plot

output$distPlot <- renderPlot({
x <- faithful[, 2] # Old Faithful Geyser data
bins <- seq(min(x), max(x), length.out = input$bins + 1)

# draw the histogram with the specified number of bins
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
})

Ejecutar la aplicación

library(shiny)
runApp("my_app")

Para ejecutar la aplicación, se utiliza la función runApp con el nombre del directorio donde se encuentran los archivos anteriores.

También se puede correr la aplicación desde cualquiera de los dos archivos en el editor de texto RStudio, mediante el botón que se marca debajo (RStudio reconoce automáticamente que se trata de un código de una aplicación):





Para crear su propia aplicación Shiny:
  • Crear un directorio para la aplicación. 
  • Guardar los archivos server.R y ui.R dentro de ese directorio. 
  • Iniciar la aplicación con los métodos indicados en Rstudio. 
  • Salir de la aplicación haciendo clic en escape.
Una forma sencilla para comenzar a diseñar la aplicación, es partir de uno de los ejemplos propuestos en RStudio.

system.file("examples", package="shiny")

runExample("01_hello") # a histogram
runExample("02_text") # tables and data frames
runExample("03_reactivity") # a reactive expression
runExample("04_mpg") # global variables
runExample("05_sliders") # slider bars
runExample("06_tabsets") # tabbed panels
runExample("07_widgets") # help text and submit buttons
runExample("08_html") # shiny app built from HTML
runExample("09_upload") # file upload wizard
runExample("10_download") # file download wizard
runExample("11_timer") # an automated timer