【问题标题】:Shiny Reactive Map Fail - Leaflet map闪亮的反应地图失败 - 传单地图
【发布时间】:2018-10-30 09:51:27
【问题描述】:

我有一个如下的数据框

d <- data.frame(number = 1:4, 
                date = c(1600, 1700, 1800, 1900),
                T_name = c("name1", "name2", "name3", "name4"))

我一直试图让我的地图对选择的输入做出反应,但它不起作用。下面的代码使用适当的下拉列表加载应用程序,显示地图,但是当我从列表中选择某些内容时,传单地图没有反应。

谁能看到我在这里可能出错的地方?

界面代码

library(shiny)
library(leaflet)
ui <- fluidPage("name_of_map", 
sidebarLayout(
  sidebarPanel(
    selectInput(inputId = "input1", label = "Name of Filter" ,choices = 
unique(d$T_name)),
    selectizeInput(inputId = "year", label = "Year of Event", 
choices = unique(d$date))
  ),

  mainPanel(
    leafletOutput("mymap"))
)
)

服务器代码

 server <- function(input, output) {

  output$mymap <- renderLeaflet({ 
  leaflet(data = d[1:25,]) %>% addTiles() %>%
  addProviderTiles(providers$Esri.NatGeoWorldMap) %>%  
  addMarkers(lng=~longitude, lat=~latitude,
             popup = ~paste(mname, "<br>", "Date:", date, 
                            "<br>", "Number of casualties:", 
                           casualties,"<a href=",d$web,">",d$web, main=input$input1) 
  )
  })
}

reactive <- reactive({d})

shinyApp(ui, server)

【问题讨论】:

    标签: r shiny leaflet shiny-server


    【解决方案1】:

    您的示例中缺少一些输入变量,尤其是坐标(经度/纬度)、mname、web、casualities。并且随着您的构建,应用程序永远不会改变,因为反应值总是选择数据框 d,但它永远不会按名称或年份过滤数据。所以你必须稍微调整一下你的反应函数。在这里,我按名称或按年份过滤。任何一个条件都必须为真。

    我稍微更改了您的代码,因此至少它可以对其他人进行重现,并且我将您的反应式移动到服务器函数中。

    d <- data.frame(number = 1:4, 
                    date = c(1600, 1700, 1800, 1900),
                    longitude = runif(4, 13,18),
                    latitude = runif(4, 40, 55),
                    web= rep("www.whatever.com", 4),
                    T_name = c("name1", "name2", "name3", "name4"))
    
    
    library(shiny)
    library(leaflet)
    ui <- {fluidPage("name_of_map", 
                    sidebarLayout(
                      sidebarPanel(
                        selectInput(inputId = "input1", label = "Name of Filter" ,choices = 
                                      unique(d$T_name)),
                        selectizeInput(inputId = "year", label = "Year of Event", 
                                       choices = unique(d$date))
                      ),
    
                      mainPanel(
                        leafletOutput("mymap"))
                    )
    )}
    
    server <- function(input, output) {
      react <- reactive({
        req(input$input1)
        req(input$year)
        df <- d[d$T_name == input$input1 | d$date == input$year,]
        df
      })
    
      output$mymap <- renderLeaflet({ 
        req(input$input1)
    
        leaflet() %>% addTiles() %>%
          addProviderTiles(providers$Esri.NatGeoWorldMap) %>%
          addMarkers(lng=react()$longitude, lat=react()$latitude,
                     popup = paste("mname", "<br>", "Date:", react()$date,
                                    "<br>", "Number of casualties:",
                                    "casualties", "<a href=", react()$web, ">", main=input$input1)
                     )
      })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 感谢您修改数据框,我对其进行了简化,但设法遗漏了一些变量。效果很好,谢谢。
    猜你喜欢
    • 2023-01-11
    • 2019-09-03
    • 1970-01-01
    • 2016-12-29
    • 2018-03-13
    • 2021-12-30
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    相关资源
    最近更新 更多