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 adalah bagian dari kursus
Studi Kasus: Membangun Aplikasi Web dengan Shiny di R
Petunjuk 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 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("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)