BaşlayınÜcretsiz Başlayın

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

Önceki egzersizlerde, giriş değerlerine göre gapminder verisini filtreleyen kod üç kez tekrarlandı: bir kez tabloda, bir kez grafikte ve bir kez de indirme işleyicisinde.

Reactive değişkenler kod tekrarını azaltmak için kullanılabilir. Bu genelde iyi bir fikirdir çünkü bakımı kolaylaştırır.

Bu egzersiz

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

kursunun bir parçasıdır
Kursu Görüntüle

Egzersiz talimatları

Veriyi filtreleyen yinelenen kod parçaları kaldırıldı. Görevin, veriyi filtreleyen bir tepkisel değişken eklemek ve bunun yerine bu değişkeni kullanmak. Özellikle:

  • Önceki egzersizdeki filtreleme kodunu kullanan reactive() fonksiyonuyla filtered_data adlı bir tepkisel değişken oluştur (satır 15).
  • Tablonun çıktısını, grafiğin çıktısını ve indirilecek dosyayı üretmek için bu tepkisel değişkeni kullan (satırlar 33, 42 ve 50).

Uygulamalı interaktif egzersiz

Bu örnek kodu tamamlayarak bu egzersizi bitirin.

ui <- fluidPage(
  h1("Gapminder"),
  sliderInput(inputId = "life", label = "Life expectancy",
              min = 0, max = 120,
              value = c(30, 50)),
  selectInput("continent", "Continent",
              choices = c("All", levels(gapminder$continent))),
  downloadButton(outputId = "download_data", label = "Download"),
  plotOutput("plot"),
  tableOutput("table")
)

server <- function(input, output) {
  # Create a reactive variable named "filtered_data"
  filtered_data <- ___({
    # Filter the data (copied from previous exercise)
    data <- gapminder
    data <- subset(
      data,
      lifeExp >= input$life[1] & lifeExp <= input$life[2]
    )
    if (input$continent != "All") {
      data <- subset(
        data,
        continent == input$continent
      )
    }
    data
  })
  
  output$table <- renderTable({
    # Use the filtered_data variable to render the table output
    data <- ___
    data
  })

  output$download_data <- downloadHandler(
    filename = "gapminder_data.csv",
    content = function(file) {
      # Use the filtered_data variable to create the data for
      # the downloaded file
      data <- ___
      write.csv(data, file, row.names = FALSE)
    }
  )

  output$plot <- renderPlot({
    # Use the filtered_data variable to create the data for
    # the plot
    data <- ___
    ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point() +
      scale_x_log10()
  })
}

shinyApp(ui, server)
Kodu Düzenle ve Çalıştır