Изменить отображаемую переменную в Leaflet и Shiny в соответствии с пользовательским вводом - PullRequest
0 голосов
/ 23 ноября 2018

Обновление: я понял, как это сделать, но он работает только на панели просмотра HTML в R-Studio.

Панель просмотра работает нормально в программе просмотра HTML,но медленный и 9/10 раз отключается от сервера (я полагаю, что время ожидания) при развертывании.

Я пытался использовать isolate () и actionButtons (), но это не помогло.

Мое репо: https://github.com/MirandaLupion/GOV_1005_Final_Project (приложение находится в папке navbarApp)

Развернутое приложение: https://mlupion.shinyapps.io/Russian_crime_data/

Размер самих данных большой.Я использую функцию фильтра в реактиве, чтобы фильтровать только необходимый год, а затем выбираю только необходимую переменную.Это работало нормально, когда единственным параметром ввода был год.Может ли это быть причиной проблемы, теперь, когда это также облегчает ввод индикатора?Должен ли я сделать это в двух ответных заявлениях?

Оригинальный пост:

Я новичок в Leaflet и Shiny, и я не нашел подходящего ответа на этот вопрос, но мои извинения, если кто-то уже спросил это.

Я хочу, чтобы пользователь выбрал переменную, которая затем используется для создания картограммы в моем шейп-файле.Шейп-файл и карта отлично работают, когда я вручную вставляю переменную (заменяя переменную map_var здесь на CRIMESHARE, например) в коде.Тем не менее, когда я пытаюсь заменить эту переменную на input$y, Shiny выбрасывает эпоху: не применим метод для изменения масштаба, примененный к объекту класса «персонаж»

В текущем коде я пытаюсь сохранитьinput$y как переменная map_var.Это не работаетЯ также попытался сохранить входные данные таким образом в реактивном утверждении, но это также не удалось.

Реактивный ввод года работает правильно.

Я не уверен, что смогу создать воспроизводимый пример, поскольку он включает файл формы.Я ценю любую помощь / предложения.

Ниже приведены соответствующие части моего кода:

Подготовка данных

# Load libraries 

library(shiny)
library(tidyverse)
library(stringr)
library(rsconnect)
library(leaflet)
library(rgdal)
library(shinythemes)
library(plotly)

# Read in the data

crime_master <- read_rds("r_4_tidy.rds")

# Prepare two data sets 
# one for the plot (not shown) and one for the map 

crime_plot <- crime_master
crime_map <- crime_master %>%
  mutate(YEAR = as.character(YEAR))


# Prepare the shape file for the map 
# Read it in
# Project the shape file 

rf_map <- readOGR(dsn = "/Users/me/Desktop/folder 
/Project/RUS_adm", layer = "RUS_adm1")
rf_map <- spTransform(rf_map, CRS("+init=epsg:4326"))

crime_options <- c("Road accidents" = "ROADACCIDENT", 
               "Victims of road accidents" = "ROADVICTIM",
               "Crime share" = "CRIMESHARE", 
               "Murders" = "MURDER",
               "Incidences of rape" = "RAPE",
               "Robberies" = "ROBBERY",
               "Incidences of hooliganism" = "HOOLIGANISM",
               "White-collar crimes" = "ECONCRIME",
               "Incidences of juvenile crime" = "JUVENILECRIME") 

Интерфейс пользователя

ui <- fluidPage(theme = shinytheme("cerulean"),

sidebarLayout( 
 sidebarPanel( 

   # Let users select the year to map

   selectInput(inputId = "year", #internal label 
               label = "Year to map", #label that user sees
               choices = c(crime_map$YEAR), #vector of choices for user to pick from 
               selected = "1990"),

   # Let users select the indicator to map

   selectInput(inputId = "y", # internal label 
               label = "Indicator to display on map", # label that user sees
               choices = crime_options, # vector of choices for user to pick from 
              selected = crime_options[3])),

mainPanel(

   tabsetPanel(type = "tabs",
               tabPanel("Map an indicator", 
               leafletOutput("map", 
                             width = "100%", 
                            height = "500px"))))))

Сервер

server <- function(input, output){

  # Reactive that filters the crime_map data for the user-selected year

  map_subset <- reactive({
    req(input$year)
    filter(crime_map, YEAR == input$year) 


  })

  # Map output
  # Merge the shapefile with the sub_setted map data
  # Color by the selected indicator 
  # Set the options for the leaflet viewer 
  # Allow the user to drag
  # Add a CartoDB base map
  # Set the default view
  # Set the max bounds
  # Add the shapefile with labels
  # Color by the coloring set up

  output$map <- renderLeaflet({

    map_var <- input$y

    rf_map <- merge(rf_map, map_subset(), by = "ID_1", duplicateGeoms = 
TRUE)
    coloring <- colorNumeric(palette = "Blues",
                         domain = rf_map@data$map_var)
    m <- rf_map %>%
      leaflet(options = leafletOptions(dragging = TRUE)) %>%
      addProviderTiles(provider = "CartoDB") %>%
      setView(lng = 37.618423, lat = 55.751244, zoom = 3) %>%
     setMaxBounds(lng1 = 40, lat1 = 30, lng2 = 150, lat2 = 100) %>%
     addPolygons(weight = 1, 
              label = ~paste0(NAME, ", ", map_var),
              color = ~coloring(map_var)) %>%

  # Add a legend in the bottom

  addLegend("bottomright", 
            pal = coloring, 
            values = ~map_var,
            title = "title here",
            opacity = 1)
m})}

shinyApp(ui = ui, server = server)

Спасибо!

...