如何将条件面板设置为闪亮的selectinput?

use*_*276 5 r shiny shiny-server

我试图在我闪亮的应用程序中添加第二个输入面板,其内容取决于第一个输入面板选择的输入,我试图吹嘘使用条件面板,但运气不好。


用户界面

TO <-read.csv(“〜/ TO / TO / TO.csv”,sep =“;”)库(发光)

ShinyUI(fluidPage(

#应用程序标题titlePanel(“ dasboard”),

#带有滑动条输入的边栏,用于接收箱数

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)))))
Run Code Online (Sandbox Code Playgroud)

...


我发现的解决方案是为第一个inputPanel的每个值创建一个conditionalPanel,但是第二个inputPanel输出仅对第一个值正确。

有没有人有办法解决吗?

Por*_*hop 4

我知道下面的方法不是通过条件面板,因为我认为通过下面给出的示例来实现会更简单。

首先,您可以用来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()
      )})
  }
))
Run Code Online (Sandbox Code Playgroud)

您可以使用其他方式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))
    })
  }
))
Run Code Online (Sandbox Code Playgroud)

编辑:如何在内部添加多个小部件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)))
    })
  }
))
Run Code Online (Sandbox Code Playgroud)