从反应式表达式调用特定列(R闪亮)

时间:2017-03-27 19:11:48

标签: r proxy shiny leaflet reactive

我理解采用空间多边形数据框并使用反应式表达式构建子集的语法。例如,允许滑块作为用户输入来缩小要显示的数据范围:

ui <- fluidPage(  
sliderInput("range", "Scores", min(SPDF@data$Total_Score), max(SPDF@data$Total_Score),value = range(SPDF@data$Total_Score), step = 0.5)
)

server <- function(input, output) {

final.dat <- reactive({SPDF[SPDF@data$Total_Score >= input$range[1] & SPDF@data$Total_Score <= input$range[2],]
})
}

我知道我可以将final.dat()指定为后续渲染中的数据:例如output $ map&lt; - renderLeaflet({leaflet(final.dat())})。但是,我尝试使用leafletProxy来更新我的地图,而且我在填充多边形和根据新子集构建新图例时遇到问题。我不能再使用SPDF @ data $列语法引用我的空间多边形数据框的所需列,因为它现在是函数final.dat()。我已经尝试为final.dat()分配一个变量然后使用$ column语法,但它有错误(参见下面的代码)。我还尝试用SPDF @ data $ Column替换SPDF $ Column,只使用~Column,所有版本都会导致错误。或者地图从不绘图。

错误包括: 警告:pal2中的错误:未使用的参数(Total_Score) 错误:[on_request_read]连接由peer重置

如果您使用了反应式表达式并创建了一个函数来代替空间多边形数据框,那么如何引用列?具体来说,当引用addPolygon()中fillColor参数的列和addLegend()中的values参数时。任何人都可以看到为什么我的代码下面没有生成地图(只是滑块)?非常感谢!

完整代码:

ui <- fluidPage(  
leafletOutput("map"),
sliderInput("range", "Scores", min(SPDF@data$Total_Score),  
max(SPDF@data$Total_Score),value = range(SPDF@data$Total_Score), step = 0.5)
)

server <- function(input, output) {
# Color palette
pal <- colorNumeric(palette = "YlOrRd", domain = SPDF$Total_Score)

# Initial Map
output$map <- renderLeaflet({leaflet() %>% 
  addTiles() %>%
  addPolygons(data=SPDF,
    fillColor = ~pal(Total_Score),
    weight = 0.5,
    opacity = 1,
    color = "white") %>%
  addLegend(position = "bottomleft",pal = pal, opacity = 0.7, values = SPDF$Total_Score, title = "<strong>Total Score</strong>")
})

# Subset data
final.dat <- reactive({
SPDF[SPDF@data$Total_Score >= input$range[1] & SPDF@data$Total_Score <= input$range[2],]
})

# New color palette
pal2 <-  reactive({ 
SPDF <- final.dat()  
colorNumeric(palette = "YlOrRd", domain = SPDF$Total_Score)
})

# Leaflet Proxy to update map
observe({
SPDF <- final.dat() 
leafletProxy("map", data = SPDF) %>%
  clearShapes() %>%
  clearControls() %>%
  addPolygons(
    fillColor = ~pal2(Total_Score),
    weight = 0.5,
    opacity = 1,
    color = "white") %>%
  addLegend(position = "bottomleft",pal = pal2, opacity = 0.7, values = SPDF$Total_Score, title = "<strong>Total Score</strong>")
})
}
shinyApp(ui = ui, server = server) 

0 个答案:

没有答案