Обновление: я понял, как это сделать, но он работает только на панели просмотра 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)
Спасибо!