रीएक्टिव वैरिएबल्स

केस स्टडीज़: R में Shiny के साथ वेब एप्लिकेशन बनाना

Dean Attali

Shiny Consultant

कोड डुप्लिकेशन

data <- gapminder
data <- subset(
    data,
    lifeExp >= input$life[1] & lifeExp <= input$life[2]
)
if (input$continent != "All") {
    data <- subset(
        data,
        continent == input$continent
   )
}
  • 3 बार डुप्लिकेट
    1. renderTable()
    2. renderPlot()
    3. downloadHandler()
केस स्टडीज़: R में Shiny के साथ वेब एप्लिकेशन बनाना

रीएक्टिव वैरिएबल्स से डुप्लिकेशन घटता है

  • डुप्लिकेट कोड ⇒ कई जगह मेन्टेन करना
    • जब कोड अपडेट करना हो
    • जब बग फिक्स करने हों
  • एक इंस्टेंस छूटना आसान, बग हो सकते हैं
  • कोड डुप्लिकेशन की जगह reactive() वैरिएबल्स इस्तेमाल करें
केस स्टडीज़: R में Shiny के साथ वेब एप्लिकेशन बनाना

रीएक्टिव वैरिएबल्स

output$my_table <- renderTable({
    data <- gapminder
    data <- subset(
        data,
        lifeExp >= input$life[1] & lifeExp <= input$life[2]
    )
})
my_data <- reactive({

data <- gapminder data <- subset( data, lifeExp >= input$life[1] & lifeExp <= input$life[2] )
})
output$my_table <- renderTable({ my_data() })
केस स्टडीज़: R में Shiny के साथ वेब एप्लिकेशन बनाना

रीएक्टिव वैरिएबल्स कैशिंग

  • रीएक्टिव वैरिएबल्स अपने मान को cache करते हैं
  • अपना मान याद रखते हैं
  • डिपेंडेंसी न बदले तो दोबारा नहीं चलते
केस स्टडीज़: R में Shiny के साथ वेब एप्लिकेशन बनाना

रीएक्टिव वैरिएबल्स कैशिंग

  output$table <- renderTable({
      fit_model(input$num)
  })

  output$plot <- renderPlot({
      ggplot(
        fit_model(input$num), ...)
  })
  • fit_model() में 5s लगता है
  • fit_model() दो बार कॉल = 10s
x <- reactive({
    fit_model(input$num)
})

output$table <- renderTable({ x() })
output$plot <- renderPlot({ ggplot(x(), ...) })
  • x() दो बार कॉल होगा, लेकिन x के अंदर का कोड एक बार चलेगा
  • fit_model() एक बार कॉल = 5s
केस स्टडीज़: R में Shiny के साथ वेब एप्लिकेशन बनाना

रीएक्टिव वैरिएबल्स lazy होते हैं

  • Lazy वैरिएबल = मान की जरूरत पड़ने तक कैलकुलेट नहीं होता

    x <- reactive({
        fit_model(input$num)
    })
    
    output$download <- downloadHandler(
        filename = "x.csv",
        content = function(file) {
            write.csv(x(), file)
        }
    )
    
  • x() तभी चलता है जब डाउनलोड माँगा जाए, हर बार input$num बदलने पर नहीं

केस स्टडीज़: R में Shiny के साथ वेब एप्लिकेशन बनाना

अभ्यास करते हैं!

केस स्टडीज़: R में Shiny के साथ वेब एप्लिकेशन बनाना

Preparing Video For Download...