сделать список selecInput из data.frame - PullRequest
0 голосов
/ 13 сентября 2018

Можно ли создать список для selectInput из чтения data.frame?

Как я понимаю, можно использовать параметры selectInput для подстановки data.frame на сервере. R, а ненаоборот

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

Считать data.frame, получить уникальные наблюдения столбца кампании и поместить их в список, использовать этот список в selectInput

Код:

library(shiny)
library(tidyverse) 



shinyApp(

ui = fluidPage(
  selectInput("state", "Choose a state:",
              list(`East Coast` = c("NY", "NJ", "CT"),
                   `West Coast` = c("WA", "OR", "CA"),
                   `Midwest` = c("MN", "WI", "IA"))
  ),
  textOutput("result")
),
    server = function(input, output) {


      fb <- reactive({ 

        fb_data <- read_csv("https://www.dropbox.com/s/ry6gfksljbpg1d6/curacao-fb-julago.csv?dl=1", skip = 0)

      })


      lst_campaigns <- unique(fb()$campaign)  

      lst_campaigns
    }
  )

Ссылка для selectInput информации:

https://shiny.rstudio.com/reference/shiny/latest/selectInput.html

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Вы можете сделать это, используя функции updateSelectInput и observe следующим образом:

library(shiny)


ui <- fluidPage(
           selectInput("species", "Select a specie:", choices = NULL)
)

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

  data <- reactive({
    iris
  })

  observe({
    # Dont run unless a data have been imported 
    req(data())

    unique_obs <- levels(data()[, 'Species'])

    updateSelectInput(session = session, "species", choices = unique_obs)
  })
}

shinyApp(ui, server) 
0 голосов
/ 13 сентября 2018

Да, updateSelectInput выполняет эту работу.

В приведенном ниже примере нажатие кнопки обновления вызывает чтение файла Dropbox и обновление списка кампании. Обратите внимание, что я передаю выбор только первым десяти кампаниям, поскольку 11-я запись приводит к ошибке (возможно, есть недопустимый символ, с которым блестящий не может справиться).

library(shiny)
library(tidyverse) 

shinyApp(
  ui = fluidPage(
    selectInput("state", "Choose a state:",
                list(`East Coast` = c("NY", "NJ", "CT"),
                     `West Coast` = c("WA", "OR", "CA"),
                     `Midwest` = c("MN", "WI", "IA"))),
    actionButton("update", "Update"),
    textOutput("result")
  ),
  server = function(input, output, session) {


    fb <- reactive({ 
      fb_data <- read_csv("https://www.dropbox.com/s/ry6gfksljbpg1d6/curacao-fb-julago.csv?dl=1", skip = 0)
      fb_data
    })

    observeEvent(input$update, {
      dat = fb()
      lst_campaigns <- unique(dat$campaign) 
      updateSelectInput(session, "state",
                        choices=head(lst_campaigns, 10), 
                        selected=lst_campaigns[1])  
    })
  }
)

server для автоматического запуска.

server = function(input, output, session) {
    fb_data <- read_csv("https://www.dropbox.com/s/ry6gfksljbpg1d6/curacao-fb-julago.csv?dl=1", skip = 0)
    lst_campaigns <- unique(fb_data$campaign) 
    updateSelectInput(session, "state",
                      choices=head(lst_campaigns, 10), 
                      selected=lst_campaigns[1])  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...