如何解决绑定数据的闪亮应用仅保存一个名称
我正在尝试构建一个闪亮的应用程序以了解其工作方式。我遇到了一个问题。我正在构建一个输入表单以跟踪输入数据;特别是在这种情况下的高尔夫球手。闪亮的应用程序可以运行,但不会保存超过1个输入。例如,它演示了在服务器下编码的Player 1和Player 2。当我动态添加Player 3时-它可以工作。但是,当我添加播放器4时,它将覆盖播放器3。
感谢您的帮助。我已经阅读了约100页,但似乎找不到简单的答案。
library(shiny)
library(shinythemes)
library(ggplot2)
library(dplyr)
############################################# GOLF SHINY APP ####################################################
#building the shiny app
ui <- fluidPage(
theme = shinythemes::shinytheme("sandstone"),#user driven inputs for new golfers
titlePanel("Stableford App"),navbarPage("App Options",tabPanel("New Golfer",br(),textInput("name","Initial Golfer's name",value = "Add Name Here"),numericInput("hd_cap","Whats the Golfer's Handicap?",value = 15,min = 0,max = 50),sliderInput("goal_score","Initial Stableford Goal?",value = 10,max = 60),actionButton("add_golfer",("Add Golfer!"),icon = icon("cocktail"),class="btn btn-danger btn-block")),tabPanel("View Golfers",actionButton("gen_golfers","Update Golfer List"),dataTableOutput("initial_golfer_list"),dataTableOutput("golfer_list")
)
)
)
server <- function(input,output,session){
#building the rbind information for players
name <- c('Player 1','Player 2')
hd_cap <- c(2,10)
sgoal <- c(40,22)
big_golfer_list <- data.frame(name,hd_cap,sgoal)
big_golfer_list <- setNames(big_golfer_list,c("Golfer","Handicap","Target"))
PlayerData <- eventReactive(input$gen_golfers,{
big_golfer_list <- rbind(big_golfer_list,data.frame("Golfer" = input$name,"Handicap" = input$hd_cap,"Target" = input$goal_score))
})
#table with all names
output$golfer_list = renderDataTable(
FinalData <- PlayerData() %>% filter(Golfer != "Add Name Here"))
}
# Run the application
shinyApp(ui = ui,server = server)
解决方法
要保留以前的值,您需要使用<<-
。否则,它只会在列表中现有的两个名称中添加一个高尔夫球手名称。请查看下面的更改以获取所需的行为。
更新:我对您的代码做了一些修改,仅使用第一个操作按钮。另外,选择现在在侧边栏中。重置按钮可让您重新开始,并且可以修改显示表中的任何条目。
############# GOLF SHINY APP ##############
#building the shiny app
ui <- fluidPage(
theme = shinythemes::shinytheme("sandstone"),#user driven inputs for new golfers
titlePanel("Stableford App"),navbarPage("App Options",sidebarLayout(
sidebarPanel(
br(),textInput("name","Initial Golfer's name",value = "Add Name Here"),numericInput("hd_cap","Whats the Golfer's Handicap?",value = 15,min = 0,max = 50),sliderInput("goal_score","Initial Stableford Goal?",value = 10,max = 60),actionButton("add_golfer",("Add Golfer!"),icon = icon("cocktail"),class="btn btn-danger btn-block"),actionButton(inputId = "reset",label = "Reset",class="btn btn-primary")
),mainPanel(
tabsetPanel(
tabPanel("New Golfer",br(),# textInput("name",# numericInput("hd_cap",# sliderInput("goal_score",# actionButton("add_golfer",DTOutput("golfersnames")
),tabPanel("View Golfers",# actionButton("gen_golfers","Update Golfer List"),# dataTableOutput("initial_golfer_list"),dataTableOutput("golfer_list")
)
)
)
)
)
)
server <- function(input,output,session){
#building the rbind information for players
name <- c('Player 1','Player 2')
hd_cap <- c(2,10)
sgoal <- c(40,22)
big_golfer_list <- data.frame(name,hd_cap,sgoal)
big_golfer_list <- setNames(big_golfer_list,c("Golfer","Handicap","Target"))
DF1 <- reactiveValues(data=big_golfer_list)
orig_d1 <- big_golfer_list
PlayerData <- eventReactive(input$add_golfer,{
big_golfer_list <<- rbind(big_golfer_list,data.frame("Golfer" = input$name,"Handicap" = input$hd_cap,"Target" = input$goal_score))
})
observeEvent(input$add_golfer,{
DF1$data <- PlayerData()
output$golfersnames <- renderDT(DF1$data,editable = TRUE)
})
#table with all names
output$golfer_list = renderDataTable(
FinalData <- PlayerData() %>% filter(Golfer != "Add Name Here"))
observeEvent(input$reset,{
DF1$data <- orig_d1
})
}
# Run the application
shinyApp(ui = ui,server = server)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。