r - 在 R Shiny 中使用多个输入进行数据反应式过滤
问题描述
我正在开发一个显示传单地图的闪亮应用程序。我面临的情况与本主题完全相同: Change Leaflet Map Dynamically based on Multiple Reactive expressions
我尝试根据多个输入选择对数据框进行子集化,以创建动态地图。但我没有成功处理矢量长度错误“较长的对象长度不是较短对象长度的倍数”。这已在另一个主题中通过将“==”运算符更改为“%in%”来解决,但在我的情况下不是这样。
我的代码:
all_year <- sort(unique(sample_testsf$annee))
all_area <- sort(unique(sample_testsf$nomzone))
ui <- fluidPage(
titlePanel("AgriPAG"),
sidebarLayout(
position = "right",
mainPanel(
tabsetPanel(
tabPanel("Map", leafletOutput('mymap',width = "100%", height = 1000))
)
),
sidebarPanel(
selectInput(
inputId = "year",
label = "Select a year to display",
choices = all_year,
selected = NULL,
multiple = TRUE,
selectize = FALSE
),
selectInput(
inputId = "area",
label = "Select a district",
choices = all_area,
selected = NULL,
multiple = TRUE,
selectize = FALSE
)
)
)
)
server <- function(input,output){
output$mymap <- renderLeaflet({
leaflet(data = sample_testsf) %>%
addTiles() %>%
setView(lng=-52.3333300, lat=4.9333300 , zoom=5)
})
selectedData <- reactive({
req(input$year)
req(input$area)
sample_testsf %>%
dplyr::filter(all_year %in% input$year & all_area %in% input$area
)
})
observe({
leafletProxy("mymap", data = selectedData()) %>%
clearShapes() %>%
addPolygons(weight=2, col="black", opacity=0.5)
})
}
shinyApp(ui = ui, server = server)
我实际上理解为什么会出现这个问题(为什么我得到“警告较长的对象长度不是较短对象长度的倍数”?),我想我应该使用回收功能,但我不知道如何设置它。任何人都知道如何解决这个问题?
解决方案
我发现了我的错误,我在调用输入选择列表而不是反应函数中的选定输入。解决方案 :
selectedData <- reactive({
req(input$year)
req(input$area)
sample_testsf %>%
dplyr::filter(annee %in% input$year & nomzone%in% input$area
)
})
推荐阅读
- java - 如何生成带有多个按钮和递增标签的 GUI?
- github - 从 GitHub 存储库检索详细信息
- java - 使用 JMockit 时出错:无法初始化类 mockit.coverage.Metrics
- ios - 从 iOS 捕获 3D 图像(摄影测量)
- mysql - 为多个用户设置 mysql.user.max_connections
- sql - 在给定的日期范围参数内检索失败之间的平均时间
- angular - 添加和设置 Angular-Google-Chart 样式时出错
- angular - 动态创建的组件被添加为同级
- heroku - 将 Preact 部署到 Heroku
- terraform - 如何使用 Terraform 连接到 OCI?