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
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)