Mulai sekarangMulai gratis

Jadikan tabel interaktif

Datatable dari paket DT sering kali lebih baik untuk menampilkan data dalam aplikasi Shiny dibandingkan tabel bawaan. Tabel Shiny dapat diubah menjadi datatable dengan dua modifikasi kode sederhana: alih-alih menggunakan tableOutput() dan renderTable(), Anda menggunakan DT::dataTableOutput() dan DT::renderDataTable(). Datatable memiliki beragam opsi penyesuaian, namun kita tidak akan menggunakan opsi khusus apa pun.

Perhatikan bahwa dengan paket DT, konvensinya adalah tidak memuat paket DT, dan sebagai gantinya menggunakan prefiks DT:: saat memanggil fungsi datatable.

Latihan ini merupakan bagian dari kursus

Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Lihat Kursus

Instruksi latihan

Kode untuk aplikasi Shiny dari latihan pemrograman sebelumnya disediakan tanpa modifikasi. Tugas Anda adalah mengganti tabel Shiny dasar dengan tabel DT. Secara khusus:

  • Di UI, ganti fungsi keluaran tabel dengan keluaran datatable DT (baris 11).
  • Di server, ganti fungsi perenderan tabel dengan fungsi render datatable DT (baris 31).

Latihan interaktif langsung praktik

Cobalah latihan ini dengan melengkapi kode contoh ini.

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("download_data"),
  plotOutput("plot"),
  # Replace the tableOutput() with DT's version
  tableOutput("table")
)

server <- function(input, output) {
  filtered_data <- reactive({
    data <- gapminder
    data <- subset(
      data,
      lifeExp >= input$life[1] & lifeExp <= input$life[2]
    )
    if (input$continent != "All") {
      data <- subset(
        data,
        continent == input$continent
      )
    }
    data
  })
  
  # Replace the renderTable() with DT's version
  output$table <- renderTable({
    data <- filtered_data()
    data
  })

  output$download_data <- downloadHandler(
    filename = "gapminder_data.csv",
    content = function(file) {
      data <- filtered_data()
      write.csv(data, file, row.names = FALSE)
    }
  )

  output$plot <- renderPlot({
    data <- filtered_data()
    ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point() +
      scale_x_log10()
  })
}

shinyApp(ui, server)
Edit dan Jalankan Kode