I have data frame with lat, long, names and average score of some universities. I need the map to display universities whose score is in the range specified through the slider.
I write this, but I don't understand why it doesn't work. If you remove the filtering, then everything works fine.
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)
It will be easier to answer with an extract of your data. You can do dput(head(universities))
to post an extract.
I think your app doesn't work because you are trying to alter an existing map. To modify an existing map, you need to use leafletProxy
in an observe or observeEvent
, something like the following code should work : (but without an extract of your data I cannot test, so I am not sure)
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())
})
}
Edit : here is a working complete minimal example with some fake data
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)