Основи реактивності

Case Studies: створення вебзастосунків із Shiny в R

Dean Attali

Shiny Consultant

Базові принципи реактивності

  • Shiny використовує reactive programming
  • Виходи реагують на зміни введення
  • Коли змінюється значення змінної x, усе, що залежить від x, обчислюється повторно
  • На відміну від звичайного R:

    x <- 5
    y <- x + 1
    x <- 10
    
  • Яке значення має y? 6 чи 11?

Case Studies: створення вебзастосунків із Shiny в R

Реактивні змінні

  • Усі введення — реактивні
  • input$<inputId> усередині функції render призведе до повторного рендерингу виходу

    output$my_plot <- renderPlot({
        plot(rnorm( input$num ))
    })
    
  • output$my_plot залежить від input$num

    • input$num змінюється ⇒

      output$my_plot реагує

Case Studies: створення вебзастосунків із Shiny в R

Реактивні контексти

  • Реактивні значення можна використовувати лише в реактивних контекстах
  • Будь-яка функція render*() — реактивний контекст
  • Доступ до реактивного значення поза реактивним контекстом ⇒ помилка
server <- function(input, output) { 
    print(input$num)
}
ERROR: Operation not allowed without an active reactive context.
Case Studies: створення вебзастосунків із Shiny в R

Спостереження за реактивною змінною

  • observe({ ... }) для доступу до реактивної змінної

    server <- function(input, output) { 
        observe({ 
            print( input$num )  
        }) 
    }
    
  • Корисно для зневадження, відстежуйте реактивну змінну

  • Кожна реактивна змінна створює залежність
observe({ 
    print( input$num1 ) 
    print( input$num2 )
})
Case Studies: створення вебзастосунків із Shiny в R

Створення реактивної змінної

  • reactive({ ... }) для створення реактивної змінної

  • Неправильно:

    server <- function(input, output) {
        x <- input$num + 1
    }
    
    ERROR: Operation not allowed without an active reactive context.
    
  • Правильно:

    server <- function(input, output) { 
      x <- reactive({ 
          input$num + 1 
      })
    }
    
Case Studies: створення вебзастосунків із Shiny в R

Реактивні змінні

  • Доступ до власної реактивної змінної — як до функції:
    • додайте дужки ()
server <- function(input, output){
    x <- reactive({
        input$num + 1
    }) 
    observe({ 
        print( input$num )
        print( x() ) 
    })
}
Case Studies: створення вебзастосунків із Shiny в R

Давайте потренуємось!

Case Studies: створення вебзастосунків із Shiny в R

Preparing Video For Download...