es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

leafletProxy no funciona en shinyDashboard

El leafletProxy parece no funcionar dentro de shinyDashboard. Ver el ejemplo de trabajo a continuación donde al elegir diferentes letras se debe cambiar el color del círculo. Cualquier idea es apreciada. Problema de Github creado aquí: https://github.com/rstudio/shinydashboard/issues/377

library(shiny)
library(shinydashboard)
library(leaflet)
library(sf)

n = 100

df1 = data.frame(id = 1:n,
                 x = rnorm(n, 10, 3),
                 y = rnorm(n, 49, 1.8))

pts = st_as_sf(df1, coords = c("x", "y"), crs = 4326)

map <- leaflet() %>%
  addProviderTiles(provider = providers$CartoDB.DarkMatter) %>%
  addCircles(data = pts, group = "pts") %>%
  setView(lng = 10.5, lat = 49.5, zoom = 6)

ui <- dashboardPage(
  dashboardHeader(),
  
  dashboardSidebar(
    selectInput(inputId = 'click', 'Elegir uno:', c('A', 'B', 'C'))
  ),
  
  dashboardBody(
    fluidRow(
      div(
        id = 'map',
        column(
          width = 12,
          leafletOutput('map', height = '800px')),
      )
    )
  )
)


server <- function(input, output) {
  output$map <- renderLeaflet({map})
  
  observeEvent(input$click, {
    col <- switch(input$click, 
                  'A' = 'green', 
                  'B' = 'yellow', 
                  'C' = 'white')
    
    m <- leafletProxy("map") %>%
      clearShapes() %>%
      addCircles(data = pts,
                 color = col)

    m
  })
  
}

shinyApp(ui, server)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema mencionado en la pregunta está relacionado con el uso de leafletProxy en shinyDashboard. Se espera que el código proporcionado en el ejemplo cambie el color de los círculos de leaflet según la entrada del selectInput en el dashboardSidebar. Sin embargo, parece que la función leafletProxy no puede actualizar el color de los círculos en este escenario. Se ha creado un problema de GitHub para informar sobre este problema (https://github.com/rstudio/shinydashboard/issues/377).

    Mientras se espera una solución para el problema, una posible solución alternativa es crear un objeto reactivo separado que contenga el valor de entrada actual del selectInput y usarlo para actualizar el color de los círculos en la función addCircles. Aquí está el código del servidor modificado que implementa esta solución alternativa:

    “`{r}
    server <- function(input, output) {

    output$map <- renderLeaflet({ map })

    # Crear un objeto reactivo que contenga el valor de entrada actual
    click_val <- reactive({ input$click })

    observeEvent(click_val(), {
    col <- switch(click_val(),
    ‘A’ = ‘green’,
    ‘B’ = ‘yellow’,
    ‘C’ = ‘white’)

    # Actualizar el color de los círculos usando el objeto reactivo
    m <- map %>% 
      clearShapes() %>% 
      addCircles(data = pts,
                 color = col)
    
    # Actualizar la salida con el mapa modificado
    leafletProxy('map', data = m) %>% 
      setView(lng = 10.5, lat = 49.5, zoom = 6)
    

    })
    }
    “`

    En resumen, aunque leafletProxy no parece ser funcional dentro de shinyDashboard, es posible utilizar un objeto reactivo como solución alternativa para actualizar el color de los círculos de leaflet según los valores de entrada del dashboardSidebar.

Comments are closed.