根据R shiny中的tabsetPanel选择在侧栏中显示selectInput

时间:2017-09-10 13:22:36

标签: r shiny

我正在尝试动态地在selectInput中生成一个列表。我有一个sidebarPanel,我在其中声明了tabsetPanel。每个tabsetPanel都有不同的输出,我想在侧边栏中显示所有输出。因此,第一个选项卡的输出将是selectInput或者可能是2个selectInputs,而第二个选项卡则相同。

这是我在ui.R

中的sidebarPanel代码
## ui.R
sidebarPanel(
        tabsetPanel(
              tabPanel("aZ", uiOutput("aToZPlayerList")),
              tabPanel("byTeam", uiOutput("byTeamPlayerList"))
        ),
  ),.......

在server.R中,我写了以下内容:

## server.R
output$aToZPlayerList <- renderUI({
        selectInput("alphabet", "Players A-Z", choices=aToZ, selected=0)
        htmlOutput("List")
  })

  output$byTeamPlayerList <- renderUI({
        selectInput("team", "Teams", choices=teamList, selected=0)
        htmlOutput("List")
  })

但这不起作用,因为sidebarPanel中没有呈现任何内容。我觉得自己错过了一些东西,但由于我对此很陌生,我还是没有想到它。

到目前为止,我还没有在这里或其他地方找到答案。有什么帮助吗?感谢。

1 个答案:

答案 0 :(得分:0)

你不应该在一个uiOutput下有两个小部件,我建议把它分开:

## ui.R
sidebarPanel(
        tabsetPanel(
              tabPanel("aZ", uiOutput("aToZPlayerList"), htmlOutput("List")),...

## server.R
output$aToZPlayerList <- renderUI({
        selectInput("alphabet", "Players A-Z", choices=aToZ, selected=0)
})...

它会起作用。

[完整示例]

library(shiny)
fruits <- c("banana","raccoon","duck","grapefruit")

ui <- pageWithSidebar(
  # Application title
  headerPanel("Hello Shiny!"),
  # Sidebar with a slider input
  sidebarPanel(
    tabsetPanel(
      tabPanel("aZ", uiOutput("aToZPlayerList"), htmlOutput("List")),
      tabPanel("byTeam", uiOutput("byTeamPlayerList"))
    )),
  # Show a plot of the generated distribution
  mainPanel()
)

server <- function(input,output){

  output$aToZPlayerList <- renderUI({
    selectInput("alphabet", "Players A-Z", choices=c("A","B","C"), selected="A")
   })

  output$List <- renderUI({
    HTML(paste(fruits))
  })

  output$byTeamPlayerList <- renderUI({
    selectInput("team", "Teams", choices=c("A","B","C"), selected="B")})
}

runApp(list(ui=ui,server=server))