Respositorio: https://github.com/jbkunst/datapalooza-uc-2023-shiny-avanzado, para clonarlo en posit.cloud.
Presentación: https://jkunst.com/datapalooza-uc-2023-shiny-avanzado/.
Un repaso: https://jkunst.com/shiny-visualizacion-de-datos-con-R/clase-01.html.
Reactividad:
Expresiones reactivas, Observers y Eventos.
Módulos:
Definición, utilidades, patrón de uso.
HTMLWidgets:
Proxies y eventos.
HTML, CSS, JS:
Introduccion, definiciones, etc.
En una aplicación shiny, la lógica del server se expresa en programación reactiva.
No tenemos que darle un comando a una aplicación shiny para que se actualice. Reacionará por sí solo.
Si un input
cambia, automáticamente actualizará output
(s) (expresiones reactivas u observer
s) que dependan de dicho input
(s).
De manera conceptual una expresion reactiva es una expresión que cambiará en el tiempo.
reactive
crea una expresión reactiva, la cual cambia si una de los elementos reactivos que depende cambia.
eventReactive
igual que el anterior pero se gatilla por el cambio de una variable reactiva.
observe
Crear una expresión reactiva que se ejecuta cuando una variable de la cual depende cambia.
observeEvent
ídem al anterior pero se gatilla por el una expresión reactiva.
Similitudes: Se gatillan por el cambio de alguna variable o expresión reactiva.
Diferencias: Expresiones reactivas retornan valores, los observer
s no lo hacen.
server <- function(input, output) {
variable_reactiva <- reactive({
# calcular y rentornar algo, como una función.
...
})
variable_reactiva <- reactiveEvent(expresion_reactiva, {
# calcular y rentornar algo, si cambia `expresion_reactiva`.
...
})
observe({
# hacer algo si cambia algo que depende esta expresión.
...
})
observeEvent(expresion_reactiva, {
# hacer algo si cambia `expresion_reactiva`.
...
})
}
Se agrega una función bindEvent
el cual convierte reactive
s y observer
s en su versión Event
:
función
reactive
/ eventReactive
observe
/ observeEvent
reactiveVal
/ input
/ reactiveValues
isolate
req
invalidateLater
reactlog
El paquete reactlog
pertmite registrar las acciones de una aplicación para conocer el flujo de la reactividad.
R/01-reactlog-example.R
. Comente.Al cambiar a este flujo/framework de programación de aplicaciones shiny:
Módulo UI: El cambio en id
s es explícito. Cambiar unInput("id")
por unInput(NS("id"))
. Se puede separar para tener distintas ubicaciones (ver ejemplos).
Modulo Server: La funcionalidad es implícita, uno copia y pega, y el módulo hace el intercambio correspondiente, moduleServer
se encarga de todo.
- apps/modulos/01-app-modulos.R
- apps/modulos/02-app-modulos.R
- apps/modulos/03-app-modulos.R
- apps/modulos/04-app-modulos.R
- apps/modulos/05-app-modulos.R
- apps/modulos/06-app-modulos.R
- apps/modulos/07-app-modulos.R
Considerando el data set iris
, genere una aplicación que tenga un selector que liste las variables continuas y dado una variable realice un histograma.
Ahora transfórmelo en módulo y agregue tres instancias de dicho módulo con diferentes tablas (mtcars
, diamonds
, mtautos
, diamantes
).
Extienda el módulo para incluir un output que muestre el summary
de la variable seleccionada.
Ideas? Preguntas?
Usar librerías de visualización Javascript en R.
Los widgets se pueden incluir en documentos RMarkdown y aplicaciones web Shiny.
HTMLwidgets puden ser una parte fundamental de una aplicación dado que muestran visualizaciones.
No!
Los widget pueden utilizarse como input
s a través de eventos Javascript!
Funcionan si se integran a la aplicación.
Ejemplo 1 https://jbkunst.shinyapps.io/02-proxy-functions/.
Ejemplo 2 https://odes-chile.org/app/estaciones/.
Reutilice alguna app de la carpeta htmlwidgets
para que al hacer click sobre un sismo, se escriban todos la información del sismo en la ui.
Cree una app que genere un scatter plot de acuerdo a 2 inputs para indicar variable x, variable y. Utilice un proxy para no rebibujar el gráfico.
Para la aplicación anterior, conviértala en módulo.
Ideas? Preguntas?
HTML, CSS y JS son tres elementos (lenguajes?!) que conforman una aplicación web.
HTML (HyperText Markup Language) permite estructurar la informacion. https://www.w3schools.com/html/html_examples.asp
CSS (Cascading Style Sheets) para darle estilo a la informacion. https://www.w3schools.com/css/css_examples.asp
JS (Javascript) para hacer interactividad con esa informacion. https://www.w3schools.com/js/js_examples.asp
Aplicaciones shiny lo abstrae y hace funcionar todo mágicamente.
<div class="container-fluid">
<button id="boton" type="button" class="btn btn-default action-button">Clickéame</button>
</div>
tags
<div class="container-fluid">
<button id="boton" type="button" class="btn btn-default action-button">Clickéame</button>
</div>
<div class="container-fluid">
<button id="boton" type="button" class="btn btn-default action-button">Clickéame</button>
</div>
Comprobar si ui
, ui2
, y ui3
son iguales o similares.
Foto de Stephen Dawson en Unsplash
Foto de Guillaume Bolduc en Unsplash
Foto de Valery Sysoev en Unsplash
Foto de Nick Fewings en Unsplash
Foto de Patrick Perkins en Unsplash