Shiny 在用于开发闪亮应用程序(闪亮、传单、R studio)的数据集中不处理任何数据。错误:下标超出范围

Shiny 在用于开发闪亮应用程序(闪亮、传单、R studio)的数据集中不处理任何数据。错误:下标超出范围,shiny,mapping,leaflet,Shiny,Mapping,Leaflet,当我在Shining应用程序中使用的数据集没有数据时,会出现一个错误:下标超出边界-应用程序保持空白,没有我的地图。我希望,即使在发生错误时,地图也会显示,但带有任何标记。我该怎么做 您好,我正在使用R Shining和传单开发一个应用程序,该应用程序提供一个带有标记的地图,每次我单击一个标记时,都会出现一个包含该特定标记信息的表格。此外,我还通过if/else语句开发了一个侧栏,以便搜索我想要的信息。通过解释,我可以搜索有关特定年份、该年份的某个期间、特定情况以及该情况的状态的信息。 一切运行

当我在Shining应用程序中使用的数据集没有数据时,会出现一个错误:下标超出边界-应用程序保持空白,没有我的地图。我希望,即使在发生错误时,地图也会显示,但带有任何标记。我该怎么做

您好,我正在使用R Shining和传单开发一个应用程序,该应用程序提供一个带有标记的地图,每次我单击一个标记时,都会出现一个包含该特定标记信息的表格。此外,我还通过if/else语句开发了一个侧栏,以便搜索我想要的信息。通过解释,我可以搜索有关特定年份、该年份的某个期间、特定情况以及该情况的状态的信息。 一切运行正常,但唯一的问题是处理数据集中丢失的信息(我没有一年中特定时期的数据)。当我没有数据时,会出现“下标超出范围”错误。我希望除此之外,地图显示,但没有标记。所以,只有简单的地图。我已经开发了if和else语句,但它们并不成功。即使出现闪亮的错误,我如何保留地图?
是否需要在服务器中更改某些内容?还是用户界面

服务器代码:

pal <- colorFactor(c("lawngreen", "red", "darkgray", "yellow", "orange"), 
                   domain = c("Confirmed negative", "Confirmed positive", "Don't know", "Likely negative", "Likely positive"))

shinyServer(function(input, output) {
    data_for_map <- reactive({
    if (input$disease_choice != "All") {
      if (input$disease_quarter != "All") {
        if (input$disease_status != "All") {
          data_to_plot <- pig_data_long %>%
            filter(disease == input$disease_choice, status == input$disease_status,
                   quarter == input$disease_quarter, year == input$disease_year)
        } else {
          data_to_plot <- pig_data_long %>%
            filter(disease == input$disease_choice, quarter == input$disease_quarter, year == input$disease_year)
        }
      } else { 
        if (input$disease_status != "All") {
          data_to_plot <- pig_data_long %>%
            filter(disease == input$disease_choice, status == input$disease_status, year == input$disease_year)
        } else {
          data_to_plot <- pig_data_long %>%
            filter(disease == input$disease_choice, year == input$disease_year)
        }
      }
      } else {
        if (input$disease_quarter != "All") {
          if (input$disease_status != "All") {
            data_to_plot <- pig_data_long %>%
                filter(status == input$disease_status, quarter == input$disease_quarter, year == input$disease_year)
            } else {
              data_to_plot <- pig_data_long %>%
                filter(quarter == input$disease_quarter, year == input$disease_year)
            }
          } else {
            if (input$disease_status != "All") {
              data_to_plot <- pig_data_long %>%
                filter(status == input$disease_status, year == input$disease_year)
            } else {
              data_to_plot <- pig_data_long %>%
                filter(year == input$disease_year)
            }
          }
      }

output$map <- renderLeaflet({
    leaflet("map") %>%
      setView(lng = -3.64, lat = 57.36, zoom = 7) %>%
      addTiles() %>%
      addCircleMarkers(data = data_for_map()[[2]],
                       radius = 4,
                       color = "black",
                       stroke = FALSE,
                       fillOpacity = 1,
                       popup = ~(slapmark)) %>%
      addCircleMarkers(data = data_for_map()[[1]], 
                       color = ~pal(status),
                       stroke = FALSE,
                       fillOpacity = 1,
                       popup = ~(paste(quarter, disease, status, sep = ": ")),
                       layerId = ~(paste(slapmark, disease, status, sep = "-"))) %>%
      addLegend("bottomright",
                colors = c("lawngreen", "yellow", "orange", "red", "darkgray"), 
                labels = c("Confirmed negative", "Likely negative", "Likely positive", "Confirmed positive", "Don't know"),
                title = "Legend",
                labFormat = labelFormat(),
                opacity = 1) 

  })

 output$clicked = DT::renderDataTable({
    point = input$map_marker_click
    if (!is.null(point)) {
      point_slapmark = strsplit(point$id, "-") [[1]][1]
      data_for_map()[[1]] %>%
        filter(slapmark == point_slapmark) %>%
        select(-latitude, -longitude) %>%
        DT::datatable(data_for_map, options = list(dom = 'ltipr'),
                      class = "display", callback = JS("return table;"),
                      style = "default")
    }
  }) 
 })
pal%
addCircleMarkers(data=data\u for_map()[[2]],
半径=4,
color=“黑色”,
笔划=假,
fillOpacity=1,
弹出=~(slapmark))%>%
addCircleMarkers(data=data\u for_map()[[1]],
颜色=~pal(状态),
笔划=假,
fillOpacity=1,
弹出=~(粘贴(季度、疾病、状态、sep=“:”)),
layerId=~(粘贴(slapmark、疾病、状态、sep=“-”))%%>%
addLegend(“右下角”,
颜色=c(“绿色”、“黄色”、“橙色”、“红色”、“黑色”),
标签=c(“确认阴性”、“可能阴性”、“可能阳性”、“确认阳性”、“不知道”),
title=“图例”,
labFormat=labelFormat(),
不透明度=1)
})
输出$clicked=DT::renderDataTable({
点=输入$map\u标记\u单击
如果(!为.null(点)){
点_slapmark=strsplit(点$id,“-”[[1]][1]
_map()[[1]]%>%
过滤器(slapmark==点\u slapmark)%>%
选择(-纬度,-经度)%%>%
DT::datatable(地图的数据,选项=列表(dom='ltipr'),
class=“display”,callback=JS(“返回表;”),
style=“default”)
}
}) 
})

您可以尝试创建一个简单的map对象,只需如下设置视图即可

output$map <- renderLeaflet({ 
  leaflet() %>%
  setView(lng = -3.64, lat = 57.36, zoom = 7)
})

嗨,谢谢你的帮助!它不起作用。。。我不知道我是否真的需要使用代理。。我想对你说。。出现错误并显示“下标超出范围”时,运行基本映射
leafletProxy("map")  %>%
   addTiles() %>%
   addCircleMarkers(data = data_for_map()[[2]],
                   radius = 4,
                   color = "black",
                   stroke = FALSE,
                   fillOpacity = 1,
                   popup = ~(slapmark)) %>%
  addCircleMarkers(data = data_for_map()[[1]], 
                   color = ~pal(status),
                   stroke = FALSE,
                   fillOpacity = 1,
                   popup = ~(paste(quarter, disease, status, sep = ": ")),
                   layerId = ~(paste(slapmark, disease, status, sep = "-"))) %>%
  addLegend("bottomright",
            colors = c("lawngreen", "yellow", "orange", "red", "darkgray"), 
            labels = c("Confirmed negative", "Likely negative", "Likely positive", "Confirmed positive", "Don't know"),
            title = "Legend",
            labFormat = labelFormat(),
            opacity = 1)