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

如何在Shiny应用中点击actionButton后重置DataFrame至初始状态

解决Shiny应用中Reset按钮重置表格的问题

你的代码目前存在两个核心问题:一是搜索功能未绑定Search按钮(输入关键词后会实时筛选而非点击按钮触发),二是Reset按钮未正确实现重置表格和搜索框的逻辑。以下是修正后的完整代码:

## app.R ##
library(shiny)
library(shinydashboard)
library(DT)

# 初始化数据
col1 <- c("sd fgg","df dfg","fgh gdfg")
col2 <- c("sd fgg","df dgfg","fgh gdfg")
col3 <- c("sd fggg","dfg dfgg","fgghol gdfg")
df <- data.frame(col1, col2, col3)

ui <- dashboardPage(
  dashboardHeader(title = "Dataset Inventory"),
  dashboardSidebar(
    textInput("tt", "搜索关键词", ""),
    actionButton("ser", "搜索"),
    actionButton("res", "重置")
  ),
  dashboardBody(
    dataTableOutput("table")
  )
)

server <- function(input, output, session) {
  # 用reactiveVal存储当前显示的表格数据,初始值为原始df
  current_data <- reactiveVal(df)
  
  # 监听搜索按钮点击事件
  observeEvent(input$ser, {
    keyword <- input$tt
    if (keyword != "") {
      # 按关键词筛选所有列的行
      filtered_df <- df[apply(df, 1, function(x) any(grepl(keyword, x))), ]
      current_data(filtered_df)
    } else {
      # 关键词为空时直接显示原始数据
      current_data(df)
    }
  })
  
  # 监听重置按钮点击事件
  observeEvent(input$res, {
    # 重置表格数据为原始df
    current_data(df)
    # 清空搜索输入框
    updateTextInput(session, "tt", value = "")
  })
  
  # 渲染表格
  output$table <- renderDataTable({
    datatable(current_data())
  })
}

shinyApp(ui, server)

关键修改说明

  • 使用reactiveVal维护当前显示的表格数据,方便在搜索和重置操作时灵活更新状态。
  • 通过observeEvent分别绑定两个按钮的点击逻辑:
    • 点击搜索按钮时,根据输入关键词筛选数据并更新表格数据源。
    • 点击重置按钮时,将表格数据源恢复为原始数据,同时清空搜索输入框。
  • 表格渲染直接依赖current_data(),确保始终显示最新状态的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:10:47