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 como antes. Las aplicaciones de ejemplo incluyen su código, del que nos apropiaremos para desarrollar nuestra propia aplicación. Así que crea el fichero app.R y copia en él el contenido tal como se muestra en la aplicación. Guárdalo en un nuevo directorio vacío al que puedes llamar, por ejemplo, prueba00: recuerda, el nombre de tu aplicación será el nombre que des al directorio que la contiene. Finalmente, ejecuta runApp(“prueba00”) para desplegarla.

El ejercicio anterior muestra cómo construir aplicaciones en shiny. Una aplicación en shiny es un directorio que da nombre a la aplicación. Dentro de él tiene que haber, como mínimo, un fichero, app.R, que contiene dos bloques en que se definen los componentes ui y server. 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.

Compara el contenido de los bloques ui y server definidos en app.R y trata de relacionar los elementos qeu se definen en ellos con el resultado visual y funcional de la aplicación.

En versiones anteriores de shiny era obligatorio disponer los componentes ui y server en dos ficheros independientes, ui.R y server.R. Actualmente, es potestativo.

Además de este fichero, 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 si es que los necesitas.

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 tu fichero app.R en el directorio adecuado y accede a tu aplicación a través de tu navegador (puerto 3737, por defecto). 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.

Los bloques ui y server se comunican entre sí: ui tiene que pasarle parámetros a server 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 bloques se romperá la aplicación. Realinear los nombres en el otro bloque 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, 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 para descubrir qué tipo widgets (además de sliders) existen, cómo procesan server esos inputs, 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) 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.