具有不同侧边栏的选项卡

Joh*_*ohn 3 r shiny

我正在尝试创建一个带有多个选项卡的闪亮应用程序。每个选项卡都有自己的侧边栏。我还没能让它发挥作用。任何有关错误的帮助将不胜感激。下面是代码

    ui <- fluidPage(

  titlePanel("Hi"),    

  sidebarLayout(position = "left",
                sidebarPanel(
                  conditionalPanel(condition = "input.tabs1==1",
                                   selectizeInput('invar',"Reg in", choices = varnames, multiple = TRUE)),
                  conditionalPanel(condition = "input.tabs1==2",
                                   selectizeInput('outvar',"Reg out", choices = predictors, multiple = FALSE)),

                ),

                mainPanel(
                  tabsetPanel(id="tabs1",
                              tabPanel("input",value=1,plotOutput("Input"),
                              tabPanel("output",value=2,plotOutput("Output")
                              ))))
  )) 
Run Code Online (Sandbox Code Playgroud)

Jor*_*eys 5

首先,再次检查您的代码。你犯了以下错误:

  • 一个 tabPanel 嵌套在另一个 tabPanel 内
  • 第二个末尾有一个额外的逗号conditionalPanel(),因此您将一个空元素传递给sidebarPanel()

如果我纠正你的错误并创建一个模拟示例,它就可以正常工作。所以这里实际上没有问题:

ui <- fluidPage(

  titlePanel("Hi"),    
  sidebarLayout(position = "left",
                sidebarPanel(
                  conditionalPanel(condition = "input.tabs1==1",
                                   selectizeInput('invar',"Reg in", choices = letters[1:3], multiple = TRUE)),
                  conditionalPanel(condition = "input.tabs1==2",
                                   selectizeInput('outvar',"Reg out", choices = letters[4:6], multiple = FALSE))

                ),
                mainPanel(
                  tabsetPanel(id="tabs1",
                              tabPanel("input",value=1,plotOutput("Input")),
                              tabPanel("output",value=2,plotOutput("Output"))
                              )
                  )
  )) 

server <- function(input, output, session){
  output$Input <- renderPlot(plot(1))
  output$Output <- renderPlot(plot(2))
}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

您也可以使用以下方法来做到这一点renderUI

ui <- fluidPage(

  titlePanel("Hi"),    

  sidebarLayout(position = "left",
                sidebarPanel(
                  uiOutput("mysidebar")
                                  ),

                mainPanel(
                  tabsetPanel(id="tabs1",
                              tabPanel("input",value=1,plotOutput("Input")),
                              tabPanel("output",value=2,plotOutput("Output")
                                       )))
  )) 
server <- function(input, output, session){
  output$mysidebar <- renderUI({
    if(input$tabs1 == 1){
      selectizeInput('invar',"Reg in", choices = letters[1:3])
    } else if(input$tabs1 == 2){
      selectizeInput('outvar',"Reg out", choices = letters[4:6])
    }
  })
}
shinyApp(ui,server)
Run Code Online (Sandbox Code Playgroud)