MulaiMulai sekarang secara gratis

Variabel reaktif mengurangi duplikasi kode

Pada latihan sebelumnya, kode untuk memfilter gapminder berdasarkan nilai masukan digandakan tiga kali: sekali pada tabel, sekali pada plot, dan sekali pada pengendali unduhan.

Variabel reaktif dapat digunakan untuk mengurangi duplikasi kode, yang umumnya merupakan praktik baik karena memudahkan pemeliharaan.

Latihan ini adalah bagian dari kursus

Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Lihat Kursus

Petunjuk latihan

Potongan kode duplikat yang memfilter data telah dihapus. Tugas Anda adalah menambahkan sebuah variabel reaktif yang memfilter data, lalu gunakan variabel tersebut sebagai gantinya. Secara spesifik:

  • Buat variabel reaktif bernama filtered_data dengan menggunakan fungsi reactive() yang memanfaatkan kode pemfilteran dari latihan sebelumnya (baris 15).
  • Gunakan variabel reaktif tersebut untuk merender keluaran tabel, keluaran plot, dan berkas unduhan (baris 33, 42, dan 50).

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

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)
Edit dan Jalankan Kode