使用闪亮更新空间多边形数据框

问题描述 投票:0回答:1

我的 shapefile 有列

mean
median
sd
,我想在 R Shiny 中绘制分区统计图。我有一个侧边栏,用于控制地图图块是否应显示
mean
median
sd
。但我无法在 Shiny 中做到这一点。我尝试使用反应函数,但我不断收到以下错误

Error: Polygon data not found; please provide addPolygons with data and/or lng/lat arguments

我的代码如下

library(shiny)
library(leaflet)
library(rgdal)
library(RColorBrewer)

val <- readOGR('exampleshapefile.shp')
mybins <- c(24,270,470,555,770,2000,Inf)

ui <- fluidPage(
  sidebarLayout(
    
    sidebarPanel(
      radioButtons("stat", "Stat Type:",
                   c("Mean" = "mean",
                     "Median" = "q0_50",
                     "Standard Deviation" = "sd"
                   )
      )
      
    ),
    mainPanel("mainpanel",
              leafletOutput("distSAM")
              
    )
  )
)

server <- function(input, output) {
  
  ###################### dist-wise
  data <- eventReactive(input$stat,{
    val@data$input$stat
  })
  
  pal <- reactive({
    colorBin(palette="RdYlGn", domain = data(), na.color = "transparent", bins=mybins, reverse = TRUE)
  })
  
  labels <- reactive({
    sprintf(
      "<strong>%s<br/>%s</strong>%.1f",
      val@data[["NAME_2"]], "SAM: ", data()
    ) %>% lapply(htmltools::HTML)
  })
  
  output$distSAM <- renderLeaflet({
    df <- data()
    pal <- pal()
    lab <- labels()
    
    leaflet()  %>% addTiles() %>%
      addPolygons(data = df,
                  fillColor = ~pal(mean),
                  weight = 2,
                  opacity = 1,
                  color = "white",
                  dashArray = "3",
                  fillOpacity = 0.7,
                  highlight = highlightOptions(
                    weight = 5,
                    color = "#666",
                    dashArray = "",
                    fillOpacity = 0.7,
                    bringToFront = TRUE),
                  label = lab,
                  labelOptions = labelOptions(
                    style = list("font-weight" = "normal", padding = "3px 8px"),
                    textsize = "15px",
                    direction = "auto")) %>%
      addLegend(pal = pal, values = ~df$mean,
                title = "SAM </br> Prevalence",
                position = "bottomleft")
    
  }
  )
}

shinyApp(ui, server)
r shiny r-leaflet
1个回答
0
投票

val@data$input$stat
不是有效的数据选择。相反,你可以使用:

selected_stat <- val[[input$stat]]
© www.soinside.com 2019 - 2024. All rights reserved.