Clase 4

Marcos Armas
18 de Diciembre del 2017

Reactive user interfaces

Programación reactiva

Shiny tiene 3 tipos de programación reactiva

  • Source reactive: son todos los inputs
  • Reactive conductors: funciones
  • Reactive endpoints: outputs

Aplicación sencilla

Es aquella que tiene un input y llama a un output

Ejemplo

ui <- fluidPage(
   titlePanel("Old Faithful Geyser Data"),
   sidebarLayout(
      sidebarPanel(
         ...
      ),
      mainPanel(
         plotOutput("distPlot")
      )
   )
)
server <- function(input, output) {
  output$distPlot <- renderPlot({
    hist(rnorm(input$obs))
  })
}

Multiples outputs

Un imput puede afectar a multiples outputs.

Ejemplo

server <- function(input, output) {
  output$plotOut <- renderPlot({
    hist(faithful$eruptions, breaks = as.numeric(input$nBreaks))
    if (input$individualObs)
      rug(faithful$eruptions)
  })

  output$tableOut <- renderTable({
    if (input$individualObs)
      faithful
    else
      NULL
  })
}

Conductores Reactivos

Los conductores reactivos nos ayudan a reutilizar código eficientemente.

Ejemplo: si debemos hacer un cálculo complicado cuyo resultado afecta a 2 outputs.

Ejemplo fibonacci (no hacer esto)

Calcular el n número en la secuencia fibonacci y su inversa.

# Calculate nth number in Fibonacci sequence
fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2))

server <- function(input, output) {
  output$nthValue    <- renderText({ fib(as.numeric(input$n)) })
  output$nthValueInv <- renderText({ 1 / fib(as.numeric(input$n)) })
}

Estructura programa anterior

Ejemplo conductor reactivo (OK)

fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2))

server <- function(input, output) {
  currentFib         <- reactive({ fib(as.numeric(input$n)) })

  output$nthValue    <- renderText({ currentFib() })
  output$nthValueInv <- renderText({ 1 / currentFib() })
}

Estructura

Aplicaciones para los Conductores Reactivos

Vamos a utilizarlos para:

  • Acceder a una base de datos
  • Leer datos de un archivo
  • Descargar datos de la red
  • Realizar cálculos complejos

Implementaciones