Вот краткая демонстрация, которая, я надеюсь, будет полезной.
Несколько примечаний:
- Убедитесь, что каждый
selectInput
имеет уникальный inputId
. У вас одинаковый идентификатор для обоих. - Вы можете добавить
multiple = TRUE
к selectInput
, чтобы выбрать более одной страны или симптома - Вы можете использовать
reactive
выражение в server
для фильтрации данных на основе выбора ввода
Это также может быть полезным справочным материалом для использования leaflet
с shiny
:
https://rstudio.github.io/leaflet/shiny.html
Дайте мне знать, если это то, что вы имели в виду.
library(shiny)
library(tidyverse)
library(leaflet)
fake_data <- read.csv("https://raw.githubusercontent.com/gabrielburcea/stackoverflow_fake_data/master/gather_divided.csv")
ui <- fluidPage(
# Application title
h1("Symptoms accross the world"),
# Inputs for country and symptom
selectInput("country", "Select Country", c("Bangladesh", "India", "Nigeria", "Pakistan", "United Kingdom"), multiple = TRUE),
selectInput("symptom", "Symptom", c("Chills", "Cough", "Muscle Ache"), multiple = TRUE),
# Output with map
h2("Map"),
leafletOutput("map")
)
server <- function(input, output) {
filtered_data <- reactive({
fake_data %>%
filter(Country %in% input$country,
Symptom %in% input$symptom)
})
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
addMarkers(data = filtered_data())
})
}
# Run the application
shinyApp(ui = ui, server = server)
Редактировать :
Чтобы сделать ваш selectInput
появляются в плавающем перетаскиваемом меню, вы можете использовать absolutePanel
(как в приведенном вами примере).
Обратите внимание, что в примере используется custom. css, который может улучшить внешний вид вашего блестящего приложения. далее.
ui <- fluidPage(
h1("Symptoms accross the world"),
leafletOutput("map"),
# Floating panel
absolutePanel(id = "controls", class = "panel panel-default", fixed = TRUE,
draggable = TRUE, top = 60, left = "auto", right = 20, bottom = "auto",
width = 330, height = "auto",
h2("Data Explorer"),
# Inputs for country and symptom
selectInput("country", "Select Country", c("Bangladesh", "India", "Nigeria", "Pakistan", "United Kingdom"), multiple = TRUE),
selectInput("symptom", "Symptom", c("Chills", "Cough", "Muscle Ache"), multiple = TRUE)
)
)