Tempatkan keluaran yang berbeda pada tab yang berbeda
Tab berguna saat Anda memiliki terlalu banyak konten dan ingin membaginya. Untuk membuat tab, cukup bungkus elemen UI dalam fungsi tabPanel(), dan beri judul untuk tab menggunakan argumen title.
Agar tab muncul di UI, panel tab perlu dikelompokkan ke dalam "wadah" tabset, dengan membungkus semua panel tab di dalam tabsetPanel().
Tugas Anda adalah menambahkan tab ke aplikasi Shiny, sehingga input dan tombol unduh berada pada satu tab, plot pada tab lain, dan tabel pada tab ketiga. Karena ini murni perubahan visual, semua perubahan kode dilakukan hanya pada bagian UI.
Latihan ini adalah bagian dari kursus
Studi Kasus: Membangun Aplikasi Web dengan Shiny di R
Petunjuk latihan
- Gunakan fungsi
tabsetPanel()untuk membuat wadah bagi tiga panel tab:- Tab pertama untuk input, dan beri nama tab "Inputs".
- Tab kedua yang menampilkan plot, dan beri nama tab "Plot" (baris 16).
- Tab ketiga yang menampilkan tabel, dan beri nama tab "Table" (baris 21).
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
ui <- fluidPage(
h1("Gapminder"),
# Create a container for tab panels
___(
# Create an "Inputs" tab
tabPanel(
title = ___,
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")
),
# Create a "Plot" tab
___(
title = "Plot",
plotOutput("plot")
),
# Create "Table" tab
___(
title = ___,
DT::dataTableOutput("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
})
output$table <- DT::renderDataTable({
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)