【问题标题】:UpdateSelectInput by User Input通过用户输入更新选择输入
【发布时间】:2020-06-06 21:09:12
【问题描述】:

首先:感谢您的帮助。

这个想法是创建一个闪亮的应用程序来跟踪某种“运动”。也许更像是跟踪饮酒游戏的结果......它被称为 Funkyball,您可以在其中向目标投掷球,边跑边喝。我的目标是收集和分析人们投掷、饮酒和跑步的能力数据。

第一个tabPanel是用来创建一些Player的。

library(shiny)
ui <- fluidPage(

    mainPanel(tabsetPanel(
        tabPanel("All Player",
                 textInput("str_new_Player","New Player", ""),
                 actionButton("update", "add Player"),
                 tableOutput("tb_player")))))

    server <- function(input, output) {
        values <- reactiveValues()

        values$df <- data.frame("Player" = numeric(0))

        newEntry<- observe({
            if(input$update > 0){
                newLine <- isolate(input$str_new_Player)
                isolate(values$df[nrow(values$df) + 1,] <- c(input$str_new_Player))
            }})
        output$tb_player <- renderTable({values$df})}

    shinyApp(ui = ui, server = server)

到目前为止一切顺利。 在第二个 tabPanel 中,您将根据创建的 Players 选择第一个和第二个 Player。那是我挣扎的地方。 界面:

tabPanel("New Game",
   selectInput("Player_one", "Player 1", choices = "", selected = "")

服务器:

updateSelectInput(session, "Player_one",
                      label = paste("Player 1"),
                      choices = values$df,
                      selected = "")

我不知道如何从更新后的表中插入选项。

下一步是添加一些操作按钮,如果您单击它们,这些按钮将在表格中填充数据。例如命中或未命中以及用于衡量人们每场比赛所需时间的秒表。

【问题讨论】:

    标签: r shiny shiny-server


    【解决方案1】:

    代码存在一些问题:缺少括号,最重要的是server 也需要session 作为输入,因为updateSelectInput 使用它。我做了一些改变。我使用observeEvent 而不是observe。我认为您也可以使用observe,但您确实想观察一个事件,即按钮被按下,所以我认为它更清晰一些。此外,您只需要声明input$update,它会在那里发生变化时触发。在此事件中,您不仅会更新 data.frame,还会更新“Player_one”输入。这是您使用完整的data.frame的问题,但您只需要列Player:

    library(shiny)
    ui <- fluidPage(
    
      mainPanel(tabsetPanel(
        tabPanel("All Player",
                 textInput("str_new_Player","New Player", ""),
                 actionButton("update", "add Player"),
                 tableOutput("tb_player")),
        tabPanel("New Game",
                 selectInput("Player_one", "Player 1", choices = "", selected = ""))
    
        ))
    )
    
      server <- function(input, output, session) {
        values <- reactiveValues()
    
        values$df <- data.frame("Player" = numeric(0))
    
        observeEvent(input$update, {
          values$df <- rbind(values$df, data.frame(Player = input$str_new_Player))
          updateSelectInput(session, "Player_one",
                            label = paste("Player 1"),
                            choices = values$df$Player,
                            selected = "")
        })
    
        output$tb_player <- renderTable({values$df})
    
        }
    
      shinyApp(ui = ui, server = server)
    

    我对@9​​87654330@ 的使用不是很熟悉,也许其他人知道这里是否真的需要它们,或者其他解决方案是否更好。

    【讨论】:

    • 完美无瑕!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-08-14
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多