MulaiMulai sekarang secara gratis

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

Lihat Kursus

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