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

如何在Shiny中将verbatimTextOutput的输出读取并存入数据框

Shiny应用随机数追加到表格的修正方案

原代码核心问题:不可直接读取verbatimTextOutput对应的output对象取值,Shiny的输出对象仅用于前端渲染,业务数据需存储在响应式变量中统一调用。

具体修改点

  • 新增响应式变量存储当前生成的随机数,同时供给前端渲染和表格追加使用
  • 用reactiveVal存储动态更新的表格数据,替代全局非响应式的df变量,确保数据更新时自动触发表格重渲染
  • 用事件监听逻辑处理Add按钮点击行为,避免响应式依赖混乱

修正后完整代码

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  header = dashboardHeader(title = "Test"),
  sidebar = dashboardSidebar(),
  dashboardBody(
    fluidRow(
      column(12,
             numericInput(inputId = "mean", label = "Number:", value = 4),
             submitButton(text = "Apply Changes"),
             verbatimTextOutput("value_no"),
             actionButton("add", "Add"),
             tableOutput("table")
      ))
  )
)

server <- function(input, output) {
  # 存储当前生成的随机数,submit按下后自动更新
  current_val <- reactive({
    req(input$mean)
    rnorm(n = 1, mean = input$mean)
  })
  
  # 渲染随机数到verbatimTextOutput
  output$value_no <- renderText({
    current_val()
  })
  
  # 响应式数据框存储已添加的数值,初始为空
  df <- reactiveVal(data.frame(x = numeric(0)))
  
  # 监听Add按钮点击,追加当前数值到数据框
  observeEvent(input$add, {
    new_row <- data.frame(x = current_val())
    df(rbind(df(), new_row))
  })
  
  # 渲染表格
  output$table <- renderTable({
    df()
  }, sanitize.text.function = function(x){x})
}

shinyApp(ui, server)

逻辑说明

  1. 点击Apply Changes按钮后,依赖input$mean的current_val()会自动生成新的随机数,同时同步显示在verbatimTextOutput区域
  2. 每次点击Add按钮,就会把当前展示的随机数追加到响应式数据框中
  3. 表格输出绑定响应式数据框,数据更新后会自动重新渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:54:04