2017-02-17 26 views
0

Когда в наборе данных, который я использую в блестящем приложении, нет данных, появляется ошибка: индекс за пределами - и приложение остается пустым, без моей карты. Я хочу, чтобы даже когда произошла ошибка, отображается карта, но с любым маркером. Как я могу это сделать?Работа без данных в наборе данных, используемом для разработки блестящего приложения (блестящий, рекламный листок, студия R). ошибка: индекс за пределами

Привет, Я использую R блестящий и листовки для разработки приложения, которое дает карту с маркерами, и каждый раз, когда я нажимаю маркер, появляется таблица с информацией об этом конкретном маркере. Кроме того, у меня есть боковая панель, разработанная с помощью инструкций 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") 
    } 
    }) 
}) 

ответ

0

Вы могли бы попытаться создать простой объект карты, а просто установить вид, как показано ниже ..

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

Затем используйте функцию leafletProxy() в сторону наблюдать() для добавления маркеров и т. д. после проверки ваших данных, например

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) 
+0

Привет, спасибо вам за помощь! Он не работает ... и я не знаю, действительно ли мне нужно использовать буклетпрокси. Я хочу сказать, чтобы он был блестящим .. », когда ошибка возникает и появляется« подстрочный код за пределами границ », запустите базовую карту», –

 Смежные вопросы

  • Нет связанных вопросов^_^