Mirando ofertas de trabajo he visto que pedían para un par de ellas saber usar Shiny. Así que tras una búsqueda en Internet me he puesto manos a la obra para ver de que se trataba.Y me he llevado una grata sorpresa.
RStudio sigue pensando en como hacer la vida más fácil a los no programadores y ahora nos permite crear aplicaciones al más puro estilo servlet de java con, con su interfaz gráfica para poder jugar con ella sin tener que programar.
De esta forma cualquier programa que hagamos en R lo podemos subir a Internet y hacer que un usuario pueda jugar con él.
Este post explica muy bien de que va en un lenguaje muy llano y en castellano.
Así como un poco de magía.
via GIPHY
Disclaimer: Este artículo fue escrito en 2016! He actualizado (Abril 2020) el post con información ya que había links rotos. Espero que sirva de ayuda.
Cómo se ve un programa en Shiny
Para poder ponernos con Shiny, lo primero que tenemos que hacer es instalarlo, aunque si tenemos una de las últimas versiones de Rstudio ya nos vendrá integrado.
Instalar shiny en R
Para los anticuados:
> install.packages("shiny")
Para los más modernos
Directamente pasamos a Rstudio
Cómo funciona un programa en Shiny
Cualquier proyecto shiny lo vamos a ver como un directorio formado por varios archivos.Debido a que el programa va a correr en un servidor (aunque sea en localhost) y que tiene interfaz gráfica vamos a necesitar al menos un script para el servidor y otro script para nuestro GUI.
Archivo ui.R
Este archivo va a tener todo lo que necesitamos para la interfaz gráfica.La ventanita, los títulos, etc etc.
Para hacer todavía más fácil la creación de la aplicación si decidimos publicarla en una web por defecto Shiny la creadará con el framework Bootstrap que es ampliamente utilizado hoy en día y usa HTML5. ¿Qué más se puede pedir?
Código ui.R
This is the user-interface definition of a Shiny web application.
# You can find out more about building applications with Shiny here:
#
# http://shiny.rstudio.com
#
library(shiny)
shinyUI(fluidPage(
# Application title
titlePanel("Old Faithful Geyser Data"),
# Sidebar with a slider input for 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")
)
)
))
Archivo server.R
Este archivo es el del servidor.
Código server.R
# This is the server logic for a Shiny web application.
# You can find out more about building applications with Shiny here:
#
# http://shiny.rstudio.com
#
library(shiny)
shinyServer(function(input, output) {
output$distPlot <- renderPlot({
# generate bins based on input$bins from ui.R
x <- faithful[, 2]
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')
})
})
Crear un proyecto en Shiny
Esto va a hacer que tengamos un directorio con estos dos archivos en RStudio tal que así en nuestro nuevo directorio/proyecto
Una vez creado el nuevo proyecto podemos ver aplicaciones preinstaladas para empezar a toquetearlas. Para ello sólo hace falta llamarlas desde la línea de comandos y correr la aplicación de esta forma
> library(shiny)
> runApp("my_app")
Shiny nos los pone fácil y nos tiene preparadas algunas aplicaciones preinstaladas. Así que podemos llamarlas y ver lo que es capaz de hacer. Aquí los ejemplos que podemos encontrar:
runExample("01_hello")
runExample("02_text")
runExample("03_reactivity")
runExample("04_mpg")
runExample("05_sliders")
runExample("06_tabsets")
runExample("07_widgets")
runExample("08_html")
runExample("09_upload")
runExample("10_download")
runExample("11_timer")
También puedes ver diferentes ejemplos para estudiar y trabajar sobre el código.
En mi caso he re-creado una app que lee archivos en txt y los muestra en una nube de palabras (wordcloud). Quiero que me ayude a entender de una forma fácil y visual cuales son los términos que más se repiten en los artículos de mi web. La app todavía necesita varias vueltas como por ejemplo crear stop-word o cambiar el tipo de codificación de caracteres. Pero bueno, se vería así.
Ejemplos de R con código
La página principal donde encontré los ejemplos ha desaparecido pero aún queda en pie los enlaces a los ejemplos.
Los 108 ejemplos con código puedes encontrarlos en el siguiente fork en github. En mi caso usé código del ejemplo de 002-text y wordcloud (
http://gallery.shinyapps.io/082-word-cloud )
He puesto el código y el enlace a su página en el siguiente documento para que sea más fácil de encontrar
https://docs.google.com/spreadsheets/d/1dJMZkdVHxk-mjta5eAfavCeQGLjEk6gACEZ_GkLaWAo/edit?usp=sharing
En github puedes encontrar el código de cuando cree el post (gracias Maria del pasado por hacer un fork).
*Yo actualizando los enlaces a este post que escribí en 2016, tras pasarme a Python.
Referencia de la imagen- 9gag.com/
Documentación e información sobre Rstudio Shiny