6.3 Shiny

shiny es un paquete de R para la construcción de cuadros de mando web interactivos. Permite, por ejemplo, crear interfaces para algoritmos o acceder y manipular tablas de datos a través de controles de HMTL: sliders, botones, etc.

El paquete proporciona varias aplicaciones de ejemplo que usaremos para aprender los rudimentos de shiny. Por ejemplo, se puede hacer

library(shiny)
runExample(example = "01_hello")

para desplegar la aplicación de ejemplo 01_hello. Esta aplicación pinta en el panel central un histograma y tiene en el lateral un slider con el que modular su granularidad (técnicamente, para definir el número de pedazos, breaks, en los que partir el rango de valores del vector subyacente).

Para detener la aplicación, en RStudio, presiona sobre el icono de la señal de stop (en la parte superior de la ventana de la consola); en una terminal, usa Control-C para interrumpir la ejecución.

Ejecuta runExample() (sin argumento); el mensaje de error indica qué otros ejemplos además de 01_hello están disponibles por defecto. Échales un vistazo a algunos.

Crea tu primera aplicación en shiny. Para ello, despliega 01_hello. Luego, copia los ficheros ui.r y server.r en un nuevo directorio vacío. Llámalo, por ejemplo, prueba00. Luego ejecuta runApp(“prueba00”) para desplegarla. (Nota: el argumento de runApp tiene que ser la ruta, sea absoluta o relativa, del directorio en cuestión; recuerda que una aplicación en shiny recibe el nombre del directorio que la contiene).

El ejercicio anterior muestra cómo construir aplicaciones en shiny. Una aplicación en shiny es un directorio quee da nombre a la aplicación. Dentro de él tiene que haber, como mínimo, dos ficheros: ui.r y server.r. El primero define la interfaz de la aplicación. El segundo realiza los cálculos en segundo plano cada vez que el usuario manipula los controles de la interfaz.

Además de estos ficheros, en aplicaciones más complejas, puede haber otros organizados o no en subdirectorios: datos, otros ficheros auxiliares de código, logos, CSSs, imágenes estáticas, etc. Tendrás que leer la documentación de shiny para averiguar cómo y dónde colocar estos recursos adicionales.

Los dos ejercicios siguientes, opcionales, bastante avanzados y que tienen más que ver con la administración de sistemas Linux que con R, muestran cómo una aplicación desarrollada en Shiny puede ser puesta en producción y distribuida a los usuarios a través de la web.

Instala Shiny Server (busca en internet la página de descarga de esa aplicación) en tu máquina Linux. Guarda tus ficheros ui.r y server.r en el directorio adecuado y accede a ellas a través de tu navegador (puerto 3737). Nota: existen tutoriales bastante detallados sobre cómo hacer esto.

Como continuación del ejercicio anterior, da salida a shiny a través del puerto 80 vía Apache u otros.

ui.r y server.r se comunican entre sí: ui.r tiene que pasarle parámetros a server.r y este resultados a aquel. Esto se hace a través de variables y estructuras de datos con una forma muy particular. El siguiente ejercicio está pensado para que descubras el mecanismo de comunicación. Se te va a pedir que traduzcas el nombre de las variables y los parámetros al español. Obviamente, al traducir las variables en uno de los ficheros se romperá la aplicación. Realinear los nombres en el otro fichero te servirá para identificar los mecanismos de comunicación.

Crea prueba01 como una copia de prueba00. Entonces, traduce al español el nombre de todas las variables implicadas en la aplicación.

El siguiente ejercicio te enseñará a modificar la interfaz de una aplicación en shiny, incorporar nuevos controles y añadir el código subyacente para que responda adecuadamente.

Añade a la aplicación prueba01 otro slider que mueva una linea vertical roja que dibujes sobre el histograma. Es recomendable que comiences, y en este orden, añadiendo una línea roja en algún punto (del eje x) prefijado con la función abline, incorporando el slider y finalmente, vinculando el valor proporcionado por el slider al punto del eje x.

Nota: cuando modifiques ui.r, presta atención a la estructura del programa y cómo se corresponde a la de la interfaz web: qué es lo que va en la barra lateral, qué en el panel central, etc. Ten cuidado además con los paréntesis: ¡hay muchos y es fácil desemparejarlos!

Inspecciona el tutorial de shiny (http://shiny.rstudio.com/tutorial/) para descubrir qué tipo widgets (además de sliders) existen, cómo se procesan esos inputs en server.r, etc. Recuerda que ese tutorial es la principal fuente de información sobre todo lo relacionado con shiny.

Visita la galería de aplicaciones de shiny (http://shiny.rstudio.com/gallery/) para investigar cómo implementar controles, qué tipos adicionales de paneles existen, etc.

Uno de los asuntos (avanzados) que se discuten en esas páginas es el de las reacciones: shiny está basado en un tipo de programación denominada reactiva, que es la que permite que las funciones de server.r simulen estar escuchando (y reaccionen) a los cambios que realiza el usuario en los controles de la aplicación. Puedes buscar en internet más información sobre la programación reactiva si te interesa el tema.