R блестящий реагирует на ввод листовок

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

Я прикрепил свой код ниже:


  titlePanel("Hello Shiny!"),

  sidebarLayout(

    sidebarPanel(

      selectizeInput(inputId = 'lsoa', 
                     label = 'Choose your lsoa', 
                     choices = c('Ealing' = 'ealing', 
                                 'Camden' = 'camden') , 
                     selected = 'camden', multiple = TRUE),

      uiOutput(outputId = 'time_var'),

      sliderInput("Date_of_year",
                  "Dates",
                  min = as.Date("2017-09-01","%Y-%m-%d"),
                  max = as.Date("2018-07-31","%Y-%m-%d"),
                  value=as.Date("2017-09-01"),
                  timeFormat="%Y-%m-%d"),
      uiOutput(outputId = 'datevar'),


      sliderInput("slider_hours", "Hours:", min=0, max=23, value=0, step = 1),

      uiOutput(outputId = 'hour_var')

      # sliderInput("slider_mins", "Mins:",min = 0, max = 45, value = 0, step = 15),
      # 
      # uiOutput(outputId = 'min_var')


    ),


    mainPanel(

      leafletOutput(outputId = "map")

    )
  )
)


server <- function(input, output) {

  output$map <- renderLeaflet({
    m <- leaflet() %>% 

      addTiles()%>%
      setView(lng = -0.1911, lat = 51.5371, zoom = 11)%>%
      addMarkers(data = subset(noise_sample, hour_time == input$slider_hours ),
        lng = ~longitude, 
        lat = ~latitude, 
        popup = ~as.character(lpaeq_T), 
        label = ~as.character(lsoa11nm))%>%
      addPolygons(data = subset(main_shape, grepl(paste(input$lsoa, collapse = '|'), 
                                                  tolower(lsoa11nm))), 
                  color = "#444444", 
                  weight = 1, 
                  smoothFactor = 0.5,
                  opacity = 1.0, 
                  fillOpacity = 0.5)
   m
  })
}

shinyApp(ui, server)

Здесь «hour_time» - имя столбца в моих данных noise_sample. Он должен просто дать число, которое должно быть таким же, как выбранное моим slider_hours.


person user10928191    schedule 20.01.2019    source источник


Ответы (1)


Он работает, но вы можете добавить функцию «проверки» в серверной части, если ваш выбор пуст:

noise_sample <- tibble("longitude" = c(-0.1914,-0.1943), "latitude"= c(51.5371,51.6),
                   "lpaeq_T"= c("toto","tata"), "lsoa11nm"= c("toto","tata"),
                   "hour_time" = c(1,2))
ui <- fluidPage(
     titlePanel("Hello Shiny!"),
 sidebarLayout(
 sidebarPanel(
selectizeInput(inputId = 'lsoa', 
               label = 'Choose your lsoa', 
               choices = c('Ealing' = 'ealing', 
                           'Camden' = 'camden') , 
               selected = 'camden', multiple = TRUE),
uiOutput(outputId = 'time_var'),
sliderInput("Date_of_year",
            "Dates",
            min = as.Date("2017-09-01","%Y-%m-%d"),
            max = as.Date("2018-07-31","%Y-%m-%d"),
            value=as.Date("2017-09-01"),
            timeFormat="%Y-%m-%d"),
uiOutput(outputId = 'datevar'),
sliderInput("slider_hours", "Hours:", min=0, max=23, value=1, step = 1),
uiOutput(outputId = 'hour_var')
# sliderInput("slider_mins", "Mins:",min = 0, max = 45, value = 0, step = 15),
# 
# uiOutput(outputId = 'min_var')
),
 mainPanel(
     leafletOutput(outputId = "map")
 )
)
)

server <- function(input, output) {
  output$map <- renderLeaflet({

  data1 <- subset(noise_sample, hour_time == input$slider_hours)

validate(
  need(dim(data1)[1] >0, "No data")
)

 m <- leaflet() %>% 
  addTiles()%>%
  setView(lng = -0.1911, lat = 51.5371, zoom = 11)%>%
  addMarkers(data = data1,
             lng = ~longitude, 
             lat = ~latitude, 
             popup = ~as.character(lpaeq_T), 
             label = ~as.character(lsoa11nm))
# %>%
#   addPolygons(data = subset(main_shape, grepl(paste(input$lsoa, collapse = '|'), 
#                                               tolower(lsoa11nm))), 
#               color = "#444444", 
#               weight = 1, 
#               smoothFactor = 0.5,
#               opacity = 1.0, 
#               fillOpacity = 0.5)
m
  })
}

shinyApp(ui, server)
person Felipe    schedule 21.01.2019