Tepkisel değişkenler

Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme

Dean Attali

Shiny Consultant

Kod çoğaltma

data <- gapminder
data <- subset(
    data,
    lifeExp >= input$life[1] & lifeExp <= input$life[2]
)
if (input$continent != "All") {
    data <- subset(
        data,
        continent == input$continent
   )
}
  • 3 kez yinelenmiş
    1. renderTable()
    2. renderPlot()
    3. downloadHandler()
Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme

Tepkisel değişkenler kod tekrarı azaltır

  • Yinelenen kod ⇒ birden çok yerde bakım
    • Kod güncellenirken
    • Hatalar düzeltilirken
  • Bir örneği atlamak kolaydır; bu da hatalara yol açar
  • Kod çoğaltma yerine reactive() değişkenleri kullanın
Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme

Tepkisel değişkenler

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() })
Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme

Tepkisel değişkenlerde önbellekleme

  • Tepkisel değişkenler değerlerini önbelleğe alır
  • Kendi değerini hatırlar
  • Bağımlılıklar değişmediyse tekrar çalışmaz
Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme

Tepkisel değişkenlerde önbellekleme

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

  output$plot <- renderPlot({
      ggplot(
        fit_model(input$num), ...)
  })
  • fit_model() 5 sn sürer
  • fit_model() iki kez çağrılır = 10 sn
x <- reactive({
    fit_model(input$num)
})

output$table <- renderTable({ x() })
output$plot <- renderPlot({ ggplot(x(), ...) })
  • x() iki kez çağrılır, x içindeki kod bir kez çalışır
  • fit_model() bir kez çağrılır = 5 sn
Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme

Tepkisel değişkenler tembeldir

  • Tembel değişken = değere ihtiyaç duyulana kadar hesaplanmaz

    x <- reactive({
        fit_model(input$num)
    })
    
    output$download <- downloadHandler(
        filename = "x.csv",
        content = function(file) {
            write.csv(x(), file)
        }
    )
    
  • x() yalnızca indirme istendiğinde çalışır; input$num her değiştiğinde değil

Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme

Hadi pratik yapalım!

Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme

Preparing Video For Download...