Как установить условную панель для выбора входа в блестящем?

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


ui.R

TO ‹- read.csv (" ~ / TO / TO / TO.csv ", sep ="; ") библиотека (блестящая)

shinyUI (fluidPage (

# Заголовок приложения titlePanel ("панель управления"),

# Боковая панель с ползунком для ввода количества ящиков

sidebarLayout (

sidebarPanel(
  selectInput("country", label = h4("Pays"), 
              choices = levels(as.factor(TO$Pays))),
  conditionalPanel(
    condition = "input.country == 'Allemagne'",        
    selectInput("to", label = h4("Tour opérateur"), 
              choices = levels(as.factor(as.character(TO[as.character(TO$Pays)=="Allemagne",]$TO))))),
  conditionalPanel(
    condition = "input.country == 'Angleterre'",        
    selectInput("to", label = h4("Tour Operator"), 
                choices = levels(as.factor(as.character(TO[as.character(TO$Pays)=="Angleterre",]$TO)))))

...


Решение, которое я нашел, состоит в том, чтобы создать conditionalPanel для каждого значения первого inputPanel. Но второй вывод inputPanel является правильным только для первого значения.

у кого-нибудь есть решение?


person user2486276    schedule 16.01.2015    source источник
comment
Пожалуйста, покажите, что у вас есть на данный момент ...   -  person Pork Chop    schedule 16.01.2015
comment
Как вы можете видеть выше, я все еще ищу решение   -  person user2486276    schedule 16.01.2015


Ответы (1)


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

Сначала вы можете использовать updateSelectInput для обновления ваших записей, примерно так

rm(list = ls())
library(shiny)
runApp(list(
  ui = bootstrapPage(
    selectInput('data', 'Data', c('mtcars', 'iris')),
    selectInput('Cols', 'Columns', "")
  ),
  server = function(input, output, session){
    outVar <- reactive({
      mydata <- get(input$data)
      names(mydata)
    })
    observe({
      updateSelectInput(session, "Cols",choices = outVar()
      )})
  }
))

В другом случае вы можете использовать renderUI, чтобы создать selectInput и заполнить его следующим образом:

rm(list = ls())
library(shiny)
runApp(list(
  ui = bootstrapPage(
    selectInput('data', 'Data', c('mtcars', 'iris')),
    uiOutput('columns')
  ),
  server = function(input, output){
    output$columns <- renderUI({
      mydata <- get(input$data)
      selectInput('columns2', 'Columns', names(mydata))
    })
  }
))

Изменить: как добавить несколько виджетов внутри renderUI. Вам нужно обернуть свой divs внутри tagList() следующим образом:

rm(list = ls())
library(shiny)
runApp(list(
  ui = bootstrapPage(
    selectInput('data', 'Data', c('mtcars', 'iris')),
    uiOutput('columns')
  ),
  server = function(input, output){
    output$columns <- renderUI({
      mydata <- get(input$data)
      tagList(
      selectInput('columns2', 'Columns', names(mydata)),
      selectInput('columns3', 'Columns 2', names(mydata)))
    })
  }
))
person Pork Chop    schedule 16.01.2015
comment
Привет, что касается второго поста выше, если я хочу поставить несколько selectInputs и слайдер при выборе iris и mtcars, не могли бы вы помочь. - person Ashmin Kaul; 16.10.2017