我有一些大学的数据框,其中包含纬度、经度、名称和平均分数。我需要地图来显示分数在滑块指定范围内的大学。
我写了这个,但我不明白为什么它不起作用。如果删除过滤,则一切正常。
ui <- fluidPage(
leafletOutput("mymap"),
fluidRow(
column(4,
# Copy the line below to make a slider bar
sliderInput("slider", label = h3("Выберите средний баллы"), min = 0,
max = 800, value = c(100, 800)
)
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
filtered_universities = reactive({universities %>% filter(
aver_greV >= input$slider[1] & aver_greV <= input$slider[2]
)
})
output$mymap <- renderLeaflet({
mymap <- leaflet() %>% setView (lat = -73.985, lng = 40.748, zoom = 13)
leaflet(data = filtered_universities()) %>% addTiles() %>% addMarkers()
# mymap
})
}
# Run the application
shinyApp(ui = ui, server = server)
通过您的数据摘录来回答会更容易。您可以通过
dput(head(universities))
发布摘录。
我认为您的应用程序无法运行,因为您正在尝试更改现有地图。要修改现有地图,您需要在观察中使用
leafletProxy
或 observeEvent
,类似以下代码的内容应该可以工作:(但如果没有提取数据,我无法测试,所以我不确定)
server <- function(input, output) {
filtered_universities = reactive({universities %>% filter(
aver_greV >= input$slider[1] & aver_greV <= input$slider[2]
)
})
output$mymap <- renderLeaflet({
leaflet() %>% setView (lat = -73.985, lng = 40.748, zoom = 13) %>% addTiles()
})
observe({
leafletProxy('mymap') %>%
clearMarkers() %>%
addMarkers(data = filtered_universities())
})
}
编辑:这是一个完整的最小示例,其中包含一些虚假数据
universities <- data.frame(
lat = c(0,1,0,1),
lng = c(0,1,1,0),
var = c(0,1,2,3)
)
ui <- fluidPage(
leafletOutput("mymap"),
sliderInput("slider", label = "Slider", min = 0, max = 3, value = c(0, 3))
)
server <- function(input, output) {
output$mymap <- renderLeaflet({
leaflet() %>% setView (lat = 0, lng = 1, zoom = 5) %>% addTiles()
})
observe({
df = universities %>% filter(var >= input$slider[1], var <= input$slider[2])
leafletProxy('mymap') %>%
clearMarkers() %>%
addMarkers(data = df)
})
}
shinyApp(ui = ui, server = server)