我正在建立一个根据用户选择的时间段显示船只/船只的应用程序:
y <- reactive({
noEst2 <- V_Dim_Voyage %>%
filter(CompleteGMT>(Sys.Date()), CompleteGMT<= (Sys.Date()+input$voydays)) %>%
group_by(Fkey_Dim_Vessel_Id) %>% slice(which.max(CommenceGMT))
noEst <- bind_rows(noEst,noEst2)
y <- x %>% filter(Dim_Vessel_Id %in% unique(noEst$Fkey_Dim_Vessel_Id))
})
y
是一种被动反应,它基本上根据用户输入(input$voydays
)过滤数据帧。
然后根据y
中的值绘制传单地图。
output$posListMap <- renderLeaflet({
leaflet(y()) %>% addTiles() %>%
addProviderTiles(providers$Esri.WorldTopoMap) %>%
addMarkers(lng=~lon,lat=~lat,label = ~boatName)
})
然后,用户可以点击船只,并根据此信息,在侧栏栏中显示与船只航行有关的特定信息。我为此使用observe
。
observe({
click <- input$posListMap_marker_click
if(is.null(click))
return()
ShipName <- y()[which(y()$lat == click$lat & y()$lon == click$lng), ]$VesselName
Shipcargo <- V_Dim_Voyage %>%
filter(some conditions..) %>%
group_by(some variable..) %>%
top_n(4, voyNum)
output$cargoDT <- renderTable({
Shipcargo
})
})
我面临的问题是,假设根据当前选择,input$voydays
的值为10.这会在y
中生成某些船只,然后用户点击特定的船只并且在UI上呈现Shipcargo
表。但是,现在,如果input$voydays
的值更改为4,则Shipcargo
表中显示值的船只不再存在于y
中,从而导致错误。在选择input$voydays
(UI上是sliderInput
)之前,是否有某些方法可以重置标记点击甚至?