Использование наблюдайте событие в блестящем с нулевыми значениями - PullRequest
1 голос
/ 08 октября 2019

Я бьюсь над реактивным блестящим вопросом и надеялся получить помощь. Допустим, у меня есть очень простое приложение, которое отображает среднюю высоту с учетом серии выборов:

library(tidyverse)
library(shiny)
library(DT)

df <- data.frame(cat = sample(LETTERS[1:4], 20, replace = T),
                 city = sample(c("Tokyo", "Madrid", "Paris"), 20, replace = T),
                 pop = sample(1:7, 20, replace = T),
                 altitude = sample(10000:15000, 20, replace = F))

ui <- fluidPage(
  selectizeInput("cat", "Category:",
                 choices = c("A", "B", "C", "D"),
                 multiple = T,
                 selected = "A"),
  selectizeInput("city","City:", 
                 choices = NULL, 
                 multiple = T),
  selectizeInput("pop","Population:", 
                 choices = NULL, 
                 multiple = T),
  dataTableOutput("table")
)

server <- function(input, output, session) {
  observeEvent(input$cat,{
    updateSelectInput(session,"city",
                      choices = df %>% filter(cat == input$cat) %>%
                        .$city %>% unique,
                      selected = "")
  })
  observeEvent(input$city,{
    updateSelectInput(session,"pop",
                      choices = df %>% filter(cat == input$cat & city == input$city) %>%
                        .$pop %>% unique,
                      selected = "")
  })
  output$table <- renderDataTable({
    df %>%
      filter(cat == input$cat, city == input$city, pop == input$pop %>% as.numeric) %>%
      summarise(mean_altitude = mean(altitude))
  })
}

# Run the application 
shinyApp(ui = ui, server = server)

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

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

1 Ответ

3 голосов
/ 08 октября 2019
observeEvent(input$id, {
    code 
    ...
}, ignoreNULL = FALSE)



?observeEvent

Это было недавнее открытие и для меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...