2016-10-20 2 views
1

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

final_data %>% 
    group_by(registrant_city) %>% 
    summarise(Total = n()) %>% 
    arrange(desc(Total))  %>% 
    top_n(n = 10) 

Эти города должны войти в выпадающий список.

tabItem("email", 
      fluidRow(
      box(
       width = 4, status = "info",solidHeader = TRUE, 
       title = "Send Emails", 
       selectInput("email_select", 
          "Select Email Content", 
          choices = c("Price" = "price", 
             "Services" = "service" 
            )), 
       selectInput("cities", 
          "Select City", 
          choices = ?? 
         )) 
         )) 

Пожалуйста, помогите ..

ответ

1

Использование updateSelectInput на сервере, как показано ниже, и установить параметры = NULL в вашем Ui:

function(input, output, session) { 

    # If this isn't reactive you can put it in your global 
    choices_cities <- final_data %>% 
    group_by(registrant_city) %>% 
    summarise(Total = n()) %>% 
    arrange(desc(Total))  %>% 
    top_n(n = 10) 

    updateSelectInput(session = session, inputId = "cities", choices = choices_cities$registrant_city) 

} 

Или если final_data реактивный что-то вроде этого:

function(input, output, session) { 

    choices_cities <- reactive({ 
    final_data %>% 
     group_by(registrant_city) %>% 
     summarise(Total = n()) %>% 
     arrange(desc(Total))  %>% 
     top_n(n = 10) 
    }) 

    observeEvent(choices_cities(), { 
    updateSelectInput(session = session, inputId = "cities", choices = choices_cities()$registrant_city) 
    }) 

} 

Рабочий пример:

library("dplyr") 
library("shiny") 

data("world.cities", package = "maps") 

ui <- fluidPage(
    sliderInput(inputId = "n", label = "n", min = 10, max = 30, value = 10), 
    selectInput(inputId = "cities", label = "Select City", choices = NULL) 
) 

server <- function(input, output, session) { 

    choices_cities <- reactive({ 
    choices_cities <- world.cities %>% 
     arrange(desc(pop)) %>% 
     top_n(n = input$n, wt = pop) 
    }) 

    observe({ 
    updateSelectInput(session = session, inputId = "cities", choices = choices_cities()$name) 
    }) 
} 

shinyApp(ui = ui, server = server) 
0

У меня есть ответ, приведенный выше. Вот что я сделал.

ui.R 

uiOutput("city_dropdown") 

И мой server.R выглядит следующим образом

output$city_dropdown <- renderUI({ 

    city <- reg_city(final_data) 
    city <- city$registrant_city 
    city <- as.list(city) 
    selectInput("email_select", 
      "Select Email Content", 
      choices = city 
      ) 
}) 

reg_city() дает мне топ-10 городов, которые я хочу, чтобы заполнить в раскрывающемся списке, а затем преобразовать его в список дает мне желаемый результат.

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