带有单选按钮的闪亮反应值

Shiny reactive value with radiobutton

我正在创建一个用于显示等值线图的 Shiny 应用程序。

我想重新更改要在我的地图上使用单选按钮显示的值。

它与普通按钮配合得很好,但我现在正在为单选按钮而苦苦挣扎,有什么想法吗?

你可以通过这个link下载数据:https://www.data.gouv.fr/fr/datasets/r/8b004f01-e7af-40d2-ab4a-8108a8bd24b2

到目前为止,这是我的代码:

sData <- readOGR(dsn = " Set your path to the downloaded Data here")

ui<- bootstrapPage(
  leafletOutput("mymap"),
  absolutePanel(top = 10, 
                right = 10,
                radioButtons("radio", h3("Indicateurs de mobilité"),
                             choices = list("AttrOne" = "Attr1",
                                            "AttrTwo" = "Attr2")))
  )

server <- function(input, output, session) {
  v <- reactiveValues(data = sData$numdep)

  observeEvent(input$Attr1, {
    v$data <- sData $numdep
  })
  observeEvent(input$Attr2, {
    v$data <- sData $insee
  })



  output$mymap <- renderLeaflet({
    leaflet(sData) %>%  
      addProviderTiles(
           providers$"CartoDB.DarkMatter") %>%
      addPolygons(
           fillColor = ~colorBin(palette = "YlOrRd", 
                                 bins = getBreaks(v$data, 
                                                  nclass = 6, 
                                                  method = "fisher-jenks"),
                                 domain = v$data
                                 )(v$data),
           weight = 1,
           opacity = 0.3,
           color = "white",
           fillOpacity = 0.3)
  })
}

shinyApp(ui = ui, server = server)

至少有一个问题是你 "listening" 错了你的按钮,它应该是你在 ui 中确定的 id,在你的情况下,"radio" .另外,您可以用一个 observeEvent 来代替您的方式;

    ui<- bootstrapPage(
      leafletOutput("mymap"),
      absolutePanel(top = 10, 
                    right = 10,
                    radioButtons("radio", h3("Indicateurs de mobilité"),
                                 choices = list("AttrOne" = "Attr1",
                                                "AttrTwo" = "Attr2",
                                                "AttrThree" = "Attr3")))
      )

    server <- function(input, output, session) {
  v <-  observeEvent(input$radio,{ 

     if(input$radio=="Attr1"){
         v$data <- Df$A1}
     if(input$radio=="Attr2"){
         v$data <- Df$A2}
     if(input$radio=="Attr3"){
        v$data <- Df$A4}
  })





  output$mymap <- renderLeaflet({
    leaflet(Df) %>%  
      addProviderTiles(
           providers$"CartoDB.DarkMatter") %>%
      addPolygons(
           fillColor = ~colorBin(palette = "YlOrRd", 
                                 bins = getBreaks(v$data, 
                                                  nclass = 6, 
                                                  method = "fisher-jenks"),
                                 domain = v$data
                                 )(v$data),
           weight = 1,
           opacity = 0.3,
           color = "white",
           fillOpacity = 0.3)
  })
}

shinyApp(ui = ui, server = server)

尽管存在这个错误,但我不能向您保证这会正常工作,因为您的示例不可重现。下次,请提供 dput(Df) 或至少一些行,以便我们可以从头到尾执行您的代码并发现任何其他问题?

使用您的代码:

ui<- bootstrapPage(
  leafletOutput("mymap"),
  absolutePanel(top = 10, 
                right = 10,
                radioButtons("radio", h3("Indicateurs de mobilité"),
                             choices = list("AttrOne" = "Attr1",
                                            "AttrTwo" = "Attr2")))
  )

    server <- function(input, output, session) {
  v <- reactiveValues(data = sData$numdep)

observeEvent(input$radio,{ 

    if(input$radio=="Attr1"){
      v$data <- sData$numdep
      }
    if(input$radio=="Attr2"){
      v$data <- sData$insee
      }
  })

   output$mymap <- renderLeaflet({
    leaflet(sData) %>%  
      addProviderTiles(
           providers$"CartoDB.DarkMatter") %>%
      addPolygons(
           fillColor = ~colorBin(palette = "YlOrRd", 
                                 bins = getBreaks(v$data, 
                                                  nclass = 6, 
                                                  method = "fisher-jenks"),
                                 domain = v$data
                                 )(v$data),
           weight = 1,
           opacity = 0.3,
           color = "white",
           fillOpacity = 0.3)
  })
}

shinyApp(ui = ui, server = server)

最好!