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
相关产品推荐
相关产品推荐

