Qué es Shiny y para qué sirve
¿Tenés poco tiempo? Acá un resumen del post: Shiny es un paquete de R que permite construir aplicaciones web interactivas sin escribir HTML, CSS ni JavaScript. Su piedra de base es la reactividad: cuando el usuario modifica un control, los resultados que muestra la app se actualizan solos. Podés crear un tablero para mostrar tus datos y permitirle al usuario interactuar con ellos.
¿Qué es Shiny y por qué puede cambiar la forma en que compartís tus análisis?
¿Te pasó alguna vez que terminaste una investigación, preparaste los gráficos, escribiste el informe (por ejemplo, en un RMarkdown) y, cuando finalmente se lo mostraste a alguien, apareció la pregunta inevitable? “¿Y qué pasa si miramos solo los participantes de tal grupo?”. O “¿podrías mostrarme ese resultado separado por edad?”. O mi favorita: “¿tenés ese mismo gráfico pero con otra variable?”.
Durante bastante tiempo mi respuesta fue abrir R, modificar un par de líneas, volver a correr el análisis, exportar una nueva figura y enviarla por mail. Repetir el proceso unas cuantas veces alcanza para darse cuenta de que hay algo incómodo en esa dinámica. No porque las preguntas estén mal. Al contrario: suelen ser preguntas interesantes. El problema es que la persona que quiere explorar los resultados depende completamente de quien hizo el análisis. Ahí es donde aparece Shiny.
Shiny es un paquete de R desarrollado por Posit que permite crear aplicaciones web interactivas utilizando principalmente código R. Dicho de una manera menos técnica, permite transformar un análisis en una herramienta que otras personas pueden explorar por su cuenta desde el navegador. En lugar de mostrar un gráfico fijo, podés ofrecer una interfaz donde cada usuario decide qué mirar, qué filtrar y cómo visualizar los resultados.
La primera vez que vi una aplicación Shiny me pareció un poco mágica. Había botones, menús desplegables y gráficos que cambiaban instantáneamente cuando alguien tocaba algo. Mi reacción inicial fue asumir que para hacer eso había que saber desarrollo web. HTML. CSS. JavaScript. Un vocabulario que, honestamente, siempre me generó un poco de respeto.
Por supuesto que después descubrí que la realidad era más compleja (como siempre, obvio). Shiny no elimina toda la complejidad. Pero sí permite construir aplicaciones funcionales sin tener que aprender varios lenguajes nuevos desde cero. Si ya trabajás en R, el salto conceptual es mucho más pequeño de lo que parece.
La idea detrás de Shiny
Una aplicación Shiny suele tener dos componentes principales. Por un lado está la interfaz que ve el usuario: botones, selectores, controles deslizantes, tablas o gráficos. Por otro lado está la lógica que procesa los datos y genera los resultados. Si alguna vez escribiste una función en R, ya conocés una parte importante del problema. La diferencia es que ahora esa función responde continuamente a las acciones de otra persona.
Imaginá una aplicación con un menú para elegir un grupo de participantes. Cuando alguien cambia la opción seleccionada, el gráfico se actualiza automáticamente. No hace falta apretar un botón para volver a ejecutar todo el análisis. Tampoco hace falta recargar la página. Shiny detecta el cambio y actualiza únicamente lo que depende de esa selección. Ese mecanismo se conoce como reactividad y es probablemente el concepto más importante para entender cómo funciona Shiny.
Cuando empezás a trabajar con aplicaciones interactivas, la reactividad puede resultar un poco extraña porque rompe con la lógica lineal a la que estamos acostumbrados en R. Normalmente escribimos una instrucción, luego otra y luego otra más. El código avanza de arriba hacia abajo. En Shiny, en cambio, muchas expresiones quedan “a la espera”. Se ejecutan solamente cuando cambia algo de lo que dependen. Digamos que es una forma distinta de pensar el flujo del programa. La dificultad inicial no suele estar en aprender nuevas funciones sino en aprender una nueva manera de organizar las dependencias entre objetos.
Y, como suele pasar cuando aprendemos algo nuevo, al principio parece un quilombo. Después de un tiempo empieza a hacer clic.
¿Por qué tanta gente que trabaja con datos termina usando Shiny?
Creo que una de las razones es que resuelve un problema muy concreto. Muchas personas que trabajan con datos no quieren convertirse en desarrolladoras web. Quieren analizar datos, construir modelos, responder preguntas de investigación o comunicar resultados. Aprender HTML, CSS y JavaScript puede ser valioso, pero también implica tiempo y energía. Y el tiempo es finito.
Shiny permite aprovechar el conocimiento que ya tenemos de R para producir algo que se comporta como una aplicación web. Los gráficos que hacemos con ggplot2, las tablas que construimos con dplyr o los modelos que ajustamos durante el análisis pueden convertirse en componentes interactivos relativamente rápido.
Eso no significa que el desarrollo web desaparezca por completo. Si querés personalizar mucho una aplicación, probablemente termines aprendiendo algo de HTML o CSS. Pero la barrera de entrada es muchísimo más baja.
Hay algo interesante desde una perspectiva educativa. Muchas veces pensamos que aprender una herramienta implica aprender todas las herramientas relacionadas. Shiny muestra que no siempre es así. A veces aparecen capas de abstracción que nos permiten resolver problemas complejos utilizando conocimientos que ya tenemos.
Eso tiene ventajas y también algunas tensiones. En una época donde hablamos bastante sobre automatización y deskilling, me parece una discusión interesante. ¿Cuánto necesitamos entender de las tecnologías que usamos? ¿Cuándo una abstracción nos ayuda y cuándo nos oculta algo importante? No tengo una respuesta cerrada, pero Shiny es un buen ejemplo para pensar estas cuestiones.
¿Cómo se compara con Power BI o Tableau?
Esta comparación aparece bastante seguido. Herramientas como Power BI o Tableau permiten construir dashboards interactivos mediante interfaces gráficas. Muchas operaciones se realizan arrastrando elementos en la pantalla y configurando opciones desde menús.
Shiny funciona de otra manera porque está basado en código. Eso implica una curva de aprendizaje más pronunciada al comienzo, pero también ofrece una flexibilidad enorme. Si R puede calcular algo, en principio Shiny puede incorporarlo dentro de una aplicación. No dependés únicamente de los componentes que alguien decidió incluir en una interfaz visual.
La elección entre una herramienta y otra depende mucho del contexto. Si trabajás principalmente en R y ya tenés análisis desarrollados en ese ecosistema, Shiny suele integrarse de manera bastante natural al flujo de trabajo.
¿Qué cosas se pueden construir?
Cuando escuchamos “aplicación web” solemos imaginar algo enorme y complejo. Sin embargo, muchas aplicaciones Shiny son sorprendentemente simples. Podés crear una interfaz para explorar resultados de una investigación, permitiendo que cada persona filtre participantes o seleccione variables de interés. También es común construir herramientas para visualizar bases de datos, comparar modelos estadísticos, mostrar indicadores de seguimiento o generar simulaciones donde el usuario modifica parámetros y observa qué ocurre.
De hecho, una de las aplicaciones más divertidas que vi recientemente era una calculadora para diseñar rutinas de entrenamiento. Al mover algunos controles, la aplicación recalculaba automáticamente el volumen semanal y mostraba distintas recomendaciones. La tecnología es la misma. Lo que cambia es el problema que intentamos resolver.
¿Por dónde empezar?
Si estás pensando en aprender Shiny, la documentación oficial de Posit es probablemente el mejor punto de partida. Tiene ejemplos sencillos y explicaciones bastante claras de los conceptos básicos.
También recomiendo mucho Mastering Shiny, de Hadley Wickham. Es uno de esos libros a los que volvés una y otra vez. No porque haya que leerlo de punta a punta antes de escribir la primera aplicación, sino porque cada vez que te encontrás con una dificultad nueva descubrís que alguien ya la explicó ahí.
Y, como ocurre con casi cualquier herramienta de programación, mirar código ajeno suele ser una estrategia muy efectiva. La galería de ejemplos de Shiny permite abrir aplicaciones reales y revisar cómo fueron construidas. Muchas veces aprendí más modificando ejemplos existentes que leyendo teoría.
Algunas reflexiones para cerrar
Hay algo que me gusta mucho de Shiny y tiene menos que ver con la programación que con la comunicación. Cuando transformamos un análisis en una aplicación interactiva, dejamos de pensar únicamente en qué resultados queremos mostrar y empezamos a pensar qué preguntas podría querer hacerse otra persona. Diseñar una interfaz implica anticipar recorridos posibles, dudas razonables y formas alternativas de explorar los datos.
En ese sentido, crear una aplicación Shiny se parece bastante a enseñar. No alcanza con saber algo. Hay que construir condiciones para que otra persona pueda recorrer ese conocimiento por su cuenta.
Y quizás por eso me resulta una herramienta tan interesante. Porque en el fondo no se trata solamente de hacer gráficos que se mueven. Se trata de compartir resultados de una manera que deje espacio para la curiosidad de quienes los reciben.
Si trabajás en investigación y alguna vez te encontraste regenerando el mismo gráfico veinte veces para responder preguntas distintas, tal vez valga la pena dedicarle una tarde a Shiny. Con un poco de paciencia, puede cambiar bastante la forma en que compartís tu trabajo.