/ / Plusieurs curseurs réactifs dans Brillant avec leafletProxy () - r, slider, brillant, dépliant

Plusieurs curseurs réactifs dans Brillant à l'aide de leafletProxy () - r, curseur, brillant, dépliant

Je suis un débutant en cartographie et j'essaie de créer une application brillante pour visualiser la satisfaction des étudiants et le classement des universités pour toutes les universités du Royaume-Uni.

À travers le dépliant, j'ai cartographié les emplacements universitaires avec des marqueurs et ajouté des curseurs avec des popups pour voir le score de satisfaction des étudiants et le classement (voir capture d'écran).

L'idée est de pouvoir choisir un ensemble de valeurs sur les curseurs (par exemple "Satisfaction de 80 à 90" et "Classement de 1 à 30" et l'application afficherait uniquement celles qui correspondent aux deux critères.

Le problème réside dans le fait d'avoir plusieurs réactifscurseurs. Si je code le curseur de classement de la même manière que le curseur de satisfaction, le curseur de satisfaction prend les valeurs de classement au lieu des deux curseurs fonctionnant indépendamment l'un de l'autre.

Ci-dessous, vous pouvez voir mon code jusqu'à présent avec une capture d'écran de son apparence ainsi que des données (les parties expérimentales du curseur Classement sont commentées afin qu'elles n'interfèrent pas).

Des astuces pour continuer afin que les deux curseurs ne se prennent pas de valeurs

Merci beaucoup et désolé si la question est très basique.

library(dplyr)
library(shiny)
library(leaflet)


mapData <- read.csv("~/Desktop/Shiny app/Csv Shiny Data Clean.csv") %>%
filter(!is.na(Latitude) & !is.na(Longitude))


ui <- bootstrapPage(
tags$style(type = "text/css", "html,
body {width:100%;height:100%}"),

leafletOutput("uniSmap", width = "100%", height = "100%"),


#slider for student satisfaction

absolutePanel(
top = 50,
right = 50,
sliderInput(
"range",
"Satisfaction Score",
min = 1,
max = 100,
value = round(range(mapData$Satisfaction.....2016.Registered,   na.rm = TRUE), 1),
step = 1
)
),


#slider for Ranking

absolutePanel(
top = 200,
right = 50,
sliderInput(
"range",
"QS University Ranking",
min = 1,
max = 128,
value = round(range(mapData$QS.Ranking, na.rm = TRUE), 1),
step = 1
)
),

#bottom right title
absolutePanel(
bottom = 10,
left = 10,
"Satisfaction Map 2016"
)
)


server <- function(input, output, session) {

filteredData <- reactive({
mapData %>%
filter(Satisfaction.....2016.Registered >= input$range[1] &
Satisfaction.....2016.Registered <= input$range[2])
})


#question here: can I just do the same for Ranking Data (as below)?

# filteredDataRanking <- reactive({
#   mapData %>%
#     filter(QS.Ranking >= input$range[1] &
#              QS.Ranking <= input$range[2])
# })


output$uniSmap <- renderLeaflet({
# as the map is only drawn once
# use non-reactive dataframe, mapData
leaflet(mapData) %>%
addTiles() %>%
fitBounds(~min(Longitude), ~min(Latitude),
~max(Longitude), ~max(Latitude))
})

# Incremental changes to the map performed in an observer.

observe({

leafletProxy("uniSmap", data = filteredData()) %>%

clearShapes() %>%
clearPopups() %>%
clearMarkers() %>%

addMarkers(lat = ~Latitude,
lng = ~Longitude,
popup = ~paste(
Institution,
"<br>",
"Overall Satisfaction:",
Satisfaction.....2016.Registered,
"<br>"
)
)

}) #end of observe for satisfaction


#would I have to create another observe for ranking data (as below)?

# observe({
#
#   leafletProxy("uniSmap", data = filteredDataRanking()) %>%
#
#     clearShapes() %>%
#     clearPopups() %>%
#     clearMarkers() %>%
#
#     addMarkers(lat = ~Latitude,
#                lng = ~Longitude,
#                popup = ~paste(
#                  Institution,
#                  "<br>",
#                  "QS University Ranking",
#                  QS.Ranking,
#                  "<br>"
#                )
#     )
#
# }) #end of observe for Ranking






} #end of server description

shinyApp(ui = ui, server = server)






#License: thanks to Stephen McDaniel, from whom a substantial portion of this code is Copyright by ((c) 2017 Stephen McDaniel)

Capture d'écran de l'application

Lien vers les données utilisées

Réponses:

0 pour la réponse № 1

Après avoir renommé chaque curseur satisfaction et ranking vous devez utiliser les deux plages dans le même filtre pour que toutes les conditions soient appliquées:

filteredData <- reactive({
mapData %>%
filter(Satisfaction.....2016.Registered >= input$satisfaction[1] &
Satisfaction.....2016.Registered <= input$satisfaction[2]) &
QS.Ranking >= input$ranking[1] &
QS.Ranking <= input$ranking[2])
})