【问题标题】:How to update updateTabsetPanel based on selectInput如何根据 selectInput 更新 updateTabsetPanel
【发布时间】:2016-06-21 12:08:49
【问题描述】:

我有一个应用程序,它显示按球队和球员组织的 NBA 统计数据数据框。当用户选择一支球队时,将显示该球队最佳球员的统计数据框。当用户选择球员时,显示球员统计数据的数据框。

所有 30 支 NBA 球队都显示在 selectInput 中。选择团队后,不同的 selectInput 提供的选项会显示该团队中某些球员的列表。数据框有一个选项卡,用于显示玩家列表,还有一个选项卡仅显示单个玩家的统计数据。

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

在此处查看标签,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]})
})

【问题讨论】:

    标签: r shiny-server shiny


    【解决方案1】:

    请参阅下面的应用代码以了解您的自定义 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
                     )
          )
        )
      )
    
    ))
    

    服务器

    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"))
      })
    
    })
    

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

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 2019-12-10
      • 2022-01-15
      • 2018-06-30
      • 2013-10-01
      • 2019-10-07
      • 1970-01-01
      • 2019-03-18
      • 2020-10-07
      相关资源
      最近更新 更多