Reaktywność 101

Studia przypadków: tworzenie aplikacji webowych w Shiny w R

Dean Attali

Shiny Consultant

Podstawy reaktywności

  • Shiny używa programowania reaktywnego
  • Dane wyjściowe reagują na zmiany danych wejściowych
  • Gdy wartość zmiennej x się zmienia, wszystko, co od niej zależy, jest przeliczane ponownie
  • Porównanie ze zwykłym R:

    x <- 5
    y <- x + 1
    x <- 10
    
  • Jaka jest wartość y? 6 czy 11?

Studia przypadków: tworzenie aplikacji webowych w Shiny w R

Zmienne reaktywne

  • Wszystkie dane wejściowe są reaktywne
  • input$<inputId> wewnątrz funkcji render spowoduje ponowne renderowanie wyjścia

    output$my_plot <- renderPlot({
        plot(rnorm( input$num ))
    })
    
  • output$my_plot zależy od input$num

    • input$num zmienia się ⇒

      output$my_plot reaguje

Studia przypadków: tworzenie aplikacji webowych w Shiny w R

Konteksty reaktywne

  • Wartości reaktywne mogą być używane tylko w kontekstach reaktywnych
  • Każda funkcja render*() jest kontekstem reaktywnym
  • Dostęp do wartości reaktywnej poza kontekstem reaktywnym ⇒ błąd
server <- function(input, output) { 
    print(input$num)
}
ERROR: Operation not allowed without an active reactive context.
Studia przypadków: tworzenie aplikacji webowych w Shiny w R

Obserwowanie zmiennej reaktywnej

  • observe({ ... }) – dostęp do zmiennej reaktywnej

    server <- function(input, output) { 
        observe({ 
            print( input$num )  
        }) 
    }
    
  • Przydatne do debugowania i śledzenia zmiennych reaktywnych

  • Każda zmienna reaktywna tworzy zależność
observe({ 
    print( input$num1 ) 
    print( input$num2 )
})
Studia przypadków: tworzenie aplikacji webowych w Shiny w R

Tworzenie zmiennej reaktywnej

  • reactive({ ... }) – tworzenie zmiennej reaktywnej

  • Nieprawidłowo:

    server <- function(input, output) {
        x <- input$num + 1
    }
    
    ERROR: Operation not allowed without an active reactive context.
    
  • Prawidłowo:

    server <- function(input, output) { 
      x <- reactive({ 
          input$num + 1 
      })
    }
    
Studia przypadków: tworzenie aplikacji webowych w Shiny w R

Zmienne reaktywne

  • Dostęp do niestandardowej zmiennej reaktywnej jak do funkcji:
    • dodaj nawiasy ()
server <- function(input, output){
    x <- reactive({
        input$num + 1
    }) 
    observe({ 
        print( input$num )
        print( x() ) 
    })
}
Studia przypadków: tworzenie aplikacji webowych w Shiny w R

Lass uns üben!

Studia przypadków: tworzenie aplikacji webowych w Shiny w R

Preparing Video For Download...