R语言Shiny中基于组件值为现有DataFrame添加新行的实现
Shiny 表格追加新行实现方案
以下是修改后的完整可运行代码,点击Add按钮即可将侧边栏当前选中值作为新行添加到表格中:
library(shiny) library(shinydashboard) library(shinydashboardPlus) library(DT) Input<-structure(list(`Security Type` = c("Stock", "Stock", "Load Fund" ), Ticker = c("XOM", "NFLX", "AMCPX"), `Purchase Date` = structure(c(16070, 17084, 17084), class = "Date"), `Sale Date` = structure(c(18627, NA, 18545), class = "Date"), `Amount Invested` = c("$10,000", "$8,000", "$10,000")), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, -3L)) shinyApp( ui = tags$body(class="skin-blue sidebar-mini control-sidebar-open",dashboardPage( options = list(sidebarExpandOnHover = TRUE), header = dashboardHeader(title = "Investment Advisor Monitoring - Insider Trading",titleWidth = 450), sidebar = dashboardSidebar(minified = F, collapsed = F, selectInput("sectype", "Security Type", c(unique(Input$`Security Type`))), selectInput("sectick", "Ticker", c(unique(Input$Ticker))), dateInput("PurDate", "Purchase Date", value = as.Date("2013-12-31")), dateInput("selDate", "Sale Date", value = as.Date("2019-01-31")), selectInput("aminv", "Amount Invested", c(unique(Input$`Amount Invested`))), actionButton("add","Add") ), body = dashboardBody( h3('Results'), tabsetPanel(id = "tabs", tabPanel("InsiderTraining", dataTableOutput("TBL1") ) ) ), controlbar = dashboardControlbar(width = 300 ), title = "DashboardPage" )), server = function(input, output) { # 定义响应式数据容器,存储可动态修改的表格数据 rv_data <- reactiveVal(Input) # 监听Add按钮点击事件,触发时追加新行 observeEvent(input$add, { # 组装结构与原表完全一致的新行 new_row <- data.frame( `Security Type` = input$sectype, Ticker = input$sectick, `Purchase Date` = input$PurDate, `Sale Date` = input$selDate, `Amount Invested` = input$aminv, check.names = FALSE ) # 更新响应式数据 rv_data(rbind(rv_data(), new_row)) }) # 渲染动态更新的DT表格 output$TBL1<-renderDataTable( datatable(rv_data()) ) } )
核心逻辑说明
- 用
reactiveVal创建响应式数据容器,替代原有的静态数据集,只有响应式数据发生变化时,关联的前端组件才会自动更新 - 新行组装时通过
check.names = FALSE保留原表带空格的列名,避免列结构不匹配导致的追加失败 - 每次点击Add按钮后,会将新行拼接到原有数据集末尾,同步更新前端展示的表格内容
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

