如何基于selectInput更新updateTabsetPanel

时间:2016-03-07 19:26:32

标签: r shiny-server shiny

我有一个应用程序,显示由团队和玩家组织的NBA统计数据框。当用户选择一个团队时,将显示该团队中最佳玩家的统计数据框。当用户选择播放器时,显示播放器统计数据的数据帧。

所有30支NBA球队都在selectInput中显示。选择团队后,另一个selectInput商品会显示该团队中某些玩家的列表。数据框有一个标签,显示一个玩家列表和一个仅显示单个玩家统计数据的标签。

我怎样才能做到这一点,一旦用户选择了一个播放器,该应用就会更新到播放器标签?我目前用observeEvent做的事情不起作用。我尝试使用带有输入$ var1的observe但我收到的“参数长度为零”错误。

请参阅此处的标签https://binlee.shinyapps.io/test_app/

# ui.R 

shinyUI(fluidPage(
  titlePanel("My App"),

  sidebarLayout(
sidebarPanel(
  uiOutput("teamInput")
  , uiOutput("playerInput")),

mainPanel(
  tabsetPanel(
    tabPanel("Team", tableOutput("table")), 
    tabPanel("Player", tableOutput("table1"),
             id = "panelTabs")
  )))))

df <- read.csv("data.csv", header = TRUE, stringsAsFactors = FALSE)


# server.R
shinyServer(
  function(input, output, session) 
  {output$teamInput <- renderUI({selectInput("var",
                                         label = "Choose Team",
                                         choices = c(unique(df$Team)),
                                         selected = "unique(df$Team)")})

output$table <- renderTable({df[df$Team == input$var,4:14]})

output$playerInput <- renderUI({selectInput("var1",
                                          label = "Choose Player",
                                          choices = df[df$Team == input$var, 4])})

observeEvent(input$var1,  
            {updateTabsetPanel(session, inputId="panelTabs", selected="Player")})

output$table1 <- renderTable({df[df$Name == input$var1, 4:14]})
})

1 个答案:

答案 0 :(得分:0)

请参阅以下应用代码以了解您的自定义UI流程。
在我的流程中,您最初必须从团队选项卡中选择团队,然后转到播放器选项卡以选择您的播放器,同样也将展示数据表。

UI

shinyUI(fluidPage(
  titlePanel("My App"),

  sidebarLayout(
    sidebarPanel(
      conditionalPanel("input.tabSetPane == 'teamTAB'",
                       uiOutput("teamInput")
                       ),
      conditionalPanel("input.tabSetPane == 'playerTAB'",
                       uiOutput("playerInput")
                       )
      ),

    mainPanel(
      tabsetPanel(id = "tabSetPane", 
        tabPanel("Team", value = "teamTAB",
                 h1("Team - table")
                 #Call Team Table HERE
                 ), 
        tabPanel("Player", value = "playerTAB",
                 h1("Player - table")
                 #Call Player Table HERE
                 )
      )
    )
  )

))

SERVER

shinyServer(function(input, output, session) {

  output$teamInput <- renderUI({
    selectInput("teamVar", label = "Choose Team",
                choices = c("Team1", "Team2", "Team3"))
  })

  output$playerInput <- renderUI({
    selectInput("playerVar", label = "Choose Player", 
                choices = c("Player-A", "Player-B", "Player-C"))
  })

})

由于无法获得可重现的数据输入,因此仅提供通用流程 希望这会有所帮助。