You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny中实现可编辑Budget列,点击更新自动计算mrA/mrB列

解决方案

以下是改造后的代码,实现了Budget列可编辑、点击更新按钮重新计算mrA和mrB的功能:

library(DT)
library(shiny)
library(tidyverse)

initial_budget = tibble(country = c('us', 'fr', 'de'),
                        budget = c(100, 200, 300))

ui <- fluidPage(
  actionButton("update_btn", "更新计算结果"),
  br(), br(),
  DT::dataTableOutput('allocated')
)

server <- function(input, output) {
  # 用reactiveValues存储可修改的表格数据,保持会话状态
  budget_data <- reactiveValues(df = initial_budget %>% 
                                  mutate(mrA = budget * 0.25,
                                         mrB = budget * 0.75))
  
  # 监听表格单元格编辑事件,仅更新Budget列的值
  observeEvent(input$allocated_cell_edit, {
    edit_info <- input$allocated_cell_edit
    target_row <- edit_info$row
    target_col <- edit_info$col
    new_value <- edit_info$value
    
    # 仅允许修改第2列(Budget列)
    if(target_col == 2){
      budget_data$df[target_row, target_col] <- as.numeric(new_value)
    }
  })
  
  # 监听更新按钮,重新计算mrA和mrB
  observeEvent(input$update_btn, {
    budget_data$df <- budget_data$df %>%
      mutate(mrA = budget * 0.25,
             mrB = budget * 0.75)
  })
  
  # 渲染可编辑的DataTable
  output$allocated = DT::renderDataTable({
    datatable(
      budget_data$df,
      # 配置可编辑规则:仅允许单元格编辑,禁用第1、3、4列的编辑权限
      editable = list(target = 'cell', disable = list(columns = c(1,3,4))),
      options = list(
        columnDefs = list(
          # 给Budget列添加可编辑样式标记
          list(targets = 2, className = 'editable')
        )
      )
    )
  })
}

shinyApp(ui = ui, server = server)

关键改动说明

  • UI层:新增actionButton作为计算触发按钮,用户修改Budget后点击即可更新结果。
  • 状态管理:使用reactiveValues存储表格数据,替代静态初始数据,确保修改后的数据能在会话中保留。
  • 编辑权限控制:通过editable参数指定仅Budget列可编辑,避免用户误改其他计算列或国家名称列。
  • 编辑事件监听:捕获用户的单元格编辑操作,仅当编辑的是Budget列时更新数据,同时将输入值转为数值类型保证计算正确性。
  • 计算触发逻辑:点击更新按钮时,重新执行mrA = budget * 0.25和mrB = budget * 0.75的计算逻辑,更新表格中的结果列。

内容的提问来源于stack exchange,提问作者Fisseha Berhane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:05:16