在R闪亮DT表中添加一个操作(重置)按钮

问题描述 投票:0回答:1

我修改了示例here以包含保存按钮。我希望用户能够在上传新文件后通过添加重置按钮(类似于保存按钮)重置到初始表,但我想知道是否可以这样做。

编辑: 我希望按钮成为 DT 表的一部分,并放置在保存旁边。

library(shiny)
library(DT)
library(dplyr)
  
ui <- fluidPage(
  
  fileInput("upload", NULL, accept = c(".csv")),
  DTOutput("head")
  
)

server <- function(input, output, session) {
  
  rv <- reactiveValues(
    dataframe = data.frame(
      x = seq(1:12),
      y = LETTERS[1:12])
  )
  
  observe({
    req(input$upload)
    ext <- tools::file_ext(input$upload$name)
    rv$dataframe   <- switch(ext,
                             csv =  read.csv(input$upload$datapath),
                             NULL)
  })
  
  
  output$head <- renderDT({
    validate(need(!is.null(rv$dataframe)," Please upload a .csv file"))
    
    datatable(rv$dataframe, extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = list(list( extend = 'csv',
                                     filename = '//public/comments/comments.csv',
                                     text = 'Save'))))
  })
}

shinyApp(ui, server)

这是当前版本的快照:

enter image description here

r shiny dt
1个回答
0
投票

可以有多种方法来处理这个问题。这是其中之一 -

  • 使用固定数据框
    mtcars[1:6, 1:6]
    作为默认数据框,而不是生成随机数的数据框,这在我看来很难比较。
  • 添加了
    actionButton
    用于重置功能。
  • 创建了另一个名为
    dataframe_copy
    的反应变量,它始终保存默认数据帧。
library(shiny)
library(DT)
library(dplyr)

ui <- fluidPage(
  
  fileInput("upload", NULL, accept = c(".csv")),
  DTOutput("head"), 
  actionButton('reset', 'Reset')
  
)

server <- function(input, output, session) {
  
  rv <- reactiveValues(
    dataframe = mtcars[1:6, 1:6], 
    dataframe_copy = mtcars[1:6, 1:6]
  )
  
  observe({
    req(input$upload)
    ext <- tools::file_ext(input$upload$name)
    rv$dataframe   <- switch(ext,
                             csv =  read.csv(input$upload$datapath),
                             NULL)
  })
  
  observeEvent(input$reset, {
    rv$dataframe <- rv$dataframe_copy
  })
  
  output$head <- renderDT({
    validate(need(!is.null(rv$dataframe)," Please upload a .csv file"))
    
    datatable(rv$dataframe, extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = list(list( extend = 'csv',
                                     filename = '//public/comments/comments.csv',
                                     text = 'Save'))))
  })
}

shinyApp(ui, server)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.