通过用户输入更新选择输入
UpdateSelectInput by User Input
首先:感谢您的帮助。
我们的想法是创建一个闪亮的应用程序来跟踪某种 "Sports"。也许更像是跟踪饮酒游戏的结果...它称为 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)
到目前为止一切顺利。
在第二个选项卡面板中,您可以根据创建的玩家选择第一个和第二个玩家。那就是我挣扎的地方。
ui:
tabPanel("New Game",
selectInput("Player_one", "Player 1", choices = "", selected = "")
服务器:
updateSelectInput(session, "Player_one",
label = paste("Player 1"),
choices = values$df,
selected = "")
我不知道如何从更新的 table 中插入选项。
下一步是添加一些操作按钮,如果您单击它们,这些按钮会用数据填充 table。比如命中或未命中以及用于测量人们每场比赛所需时间的秒表。
代码存在一些问题:缺少括号,最重要的是 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)
我不是很熟悉 reactiveValues
的使用,也许其他人知道这里是否真的需要它们,或者其他解决方案是否更好。
首先:感谢您的帮助。
我们的想法是创建一个闪亮的应用程序来跟踪某种 "Sports"。也许更像是跟踪饮酒游戏的结果...它称为 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)
到目前为止一切顺利。 在第二个选项卡面板中,您可以根据创建的玩家选择第一个和第二个玩家。那就是我挣扎的地方。 ui:
tabPanel("New Game",
selectInput("Player_one", "Player 1", choices = "", selected = "")
服务器:
updateSelectInput(session, "Player_one",
label = paste("Player 1"),
choices = values$df,
selected = "")
我不知道如何从更新的 table 中插入选项。
下一步是添加一些操作按钮,如果您单击它们,这些按钮会用数据填充 table。比如命中或未命中以及用于测量人们每场比赛所需时间的秒表。
代码存在一些问题:缺少括号,最重要的是 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)
我不是很熟悉 reactiveValues
的使用,也许其他人知道这里是否真的需要它们,或者其他解决方案是否更好。