В Shiny можно использовать фрейм данных в качестве выбора в selectizeInput? - PullRequest
0 голосов
/ 23 июня 2018

Возможно ли, чтобы выборы в selectizeInput были строками из фрейма данных?Если да, будут ли возвращенные данные списком элементов из выбранной строки?Я не смог сделать эту работу.В приведенном ниже коде cityInput работает, поскольку варианты выбора - это символьный вектор;но locationInput не работает, список элементов в поле выбора пуст.

Это обычное явление, когда пользовательский ввод требует выбора на основе значений в нескольких столбцах для определения уникальной строки.В приведенном ниже примере разные города имеют одно и то же имя, а штат используется для однозначного определения местоположения.Склеивание двух столбцов вместе - это одно из решений, но в сложных случаях такой подход становится беспорядочным.

library(shiny)

locations <- data.frame(City=c("Ames", "Beaumont", "Beaumont", "Portland", "Portland"),
                        State=c("IA", "CA", "TX", "ME", "OR"))

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectizeInput("cityInput", "City", choices=NULL, selected=NULL),
      selectizeInput("locationInput", "Location", choices=NULL, selected=NULL)
    ),
    mainPanel("Main Panel")
  )
)

server <- function(input, output, session) {
  updateSelectizeInput(session, 'cityInput',
              choices = locations$City,
              server = TRUE
  )
  updateSelectizeInput(session, 'locationInput',
              choices = locations,
              server = TRUE
  )
}

shinyApp(ui, server)

1 Ответ

0 голосов
/ 24 июня 2018

Видимо, selectizeInput нужно, чтобы столбцы data.frame назывались value и label.

Затем он показывает что-то для местоположений:

library(shiny)

locations <- data.frame(value=c("Ames", "Beaumont", "Beaumont", "Portland", "Portland"),
                        label=c("IA", "CA", "TX", "ME", "OR"))


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectizeInput("cityInput", "City", choices=NULL, selected=NULL),
      selectizeInput("locationInput", "Location", choices=NULL, selected=NULL)
    ),
    mainPanel("Main Panel")
  )
)

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

  updateSelectizeInput(session, 'cityInput',
                       choices = locations$value,
                       server = TRUE
  )
  updateSelectizeInput(session, 'locationInput',
                       choices = locations,
                       server = TRUE
  )
}

shinyApp(ui, server)
...