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

Shiny渲染表格时Sys.time()无法生成时间戳的修复请求

修复Shiny表格自动添加时间戳的问题

你的代码问题在于把Sys.time()作为文本框的静态字符串值,点击按钮时只是把这个字符串存入表格,而非执行函数生成真实时间。同时没必要保留时间戳输入框,因为时间戳应该自动生成。以下是修复后的完整代码:

library(shiny)

ui <- fluidPage(
  titlePanel("Input table"),
  sidebarPanel(
    # 移除不需要的时间戳输入框
    textInput(inputId = "State",
              label = "State",
              value = "State"),
    
    selectInput("shot", "Drinks",
                list(`Shot Type` = list("Beer", "Whisky", "Vodka"))),
    
    actionButton("button", "Export file")
  ),
  
  mainPanel(
    tabsetPanel(
      tabPanel("Data", tableOutput(outputId = "table"))
    )
  )
)


server <- function(input, output){
  
  rv <- reactiveValues(
    df = data.frame(
      Autodate = as.POSIXct(character()), # 定义为时间类型
      State = character(),
      ShotType = character(),
      stringsAsFactors = FALSE
    )
  )
  
  observeEvent(input$button, {
    # 点击按钮时直接调用Sys.time()生成当前时间
    new_row <- data.frame(
      Autodate = Sys.time(),
      State = input$State,
      ShotType = input$shot,
      stringsAsFactors = FALSE
    )
    rv$df <- rbind(rv$df, new_row)
  })
  
  # 把表格输出移到observeEvent外,符合Shiny响应式规范
  output$table <- renderTable({
    rv$df
  })
}

shinyApp(ui = ui, server = server)

关键修改说明:

  • 移除了textInput("autodate"):时间戳由系统自动生成,无需用户输入
  • 调整rv$df的Autodate列类型为POSIXct,正确存储时间格式
  • 在点击事件中直接调用Sys.time()获取当前时间,作为新行的时间戳
  • 将renderTable从点击事件中移出,作为独立的响应式输出,避免重复定义输出对象

现在点击"Export file"按钮,表格首列会自动添加当前的系统时间,准确记录每行的创建时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:55:14