Bắt đầu ngayBắt đầu miễn phí

Thêm bộ chọn châu lục: select input

Khi có rất nhiều lựa chọn cho người dùng, các nút radio sẽ chiếm nhiều không gian và có thể không phù hợp. Select input — còn gọi là 'danh sách thả xuống' — cũng dùng để yêu cầu người dùng chọn một mục từ danh sách, nhưng gọn gàng hơn. Với select input, tất cả lựa chọn xuất hiện trong một danh sách có thể cuộn, nên dùng được ngay cả khi bạn có rất nhiều phương án.

Tương tự radio button, select input cũng có tham số choicesselected. Ngoài ra, select input có đối số multiple; khi đặt là TRUE sẽ cho phép người dùng chọn nhiều hơn một giá trị.

Mã cho ứng dụng Shiny từ bài tập trước đã được cung cấp với một vài chỉnh sửa nhỏ.

Bài tập này là một phần của khóa học

Nghiên cứu tình huống: Xây dựng ứng dụng web với Shiny trong R

Xem khóa học

Hướng dẫn bài tập

  • Thêm một selectInput() vào UI với ID "continents" và nhãn "Continents", đặt châu lục mặc định là "Europe".
    • Các lựa chọn trong danh sách phải là tất cả các châu lục có trong tập dữ liệu gapminder.
    • Cho phép người dùng chọn đồng thời nhiều châu lục.
  • Thêm mã vào server để chỉ hiển thị dữ liệu cho các châu lục được chọn, bằng cách lọc (subset) tập dữ liệu gapminder (dòng 23).

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      textInput("title", "Title", "GDP vs life exp"),
      numericInput("size", "Point size", 1, 1),
      checkboxInput("fit", "Add line of best fit", FALSE),
      radioButtons("color", "Point color",
                   choices = c("blue", "red", "green", "black")),
      # Add a continent dropdown selector
      ___(___, ___,
                  choices = levels(___),
                  multiple = ___,
                  selected = ___)
    ),
    mainPanel(
      plotOutput("plot")
    )
  )
)

# Define the server logic
server <- function(input, output) {
  output$plot <- renderPlot({
    # Subset the gapminder dataset by the chosen continents
    data <- subset(gapminder,
                   ___ %in% ___$continents)

    p <- ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point(size = input$size, col = input$color) +
      scale_x_log10() +
      ggtitle(input$title)
    
    if (input$fit) {
      p <- p + geom_smooth(method = "lm")
    }
    p
  })
}

shinyApp(ui = ui, server = server)
Chỉnh sửa và Chạy Mã