保存 DT table 和附加信息(闪亮)

Save DT table with additional information (Shiny)

我想知道是否可以将 DT table 内容与一些不属于数据 frame/table 的附加信息一起保存,例如应用程序版本号、执行日期、sliderInput 值等.

谢谢!

下面的代表:

library(shiny)
library(DT)

ui <- fluidPage(
   sidebarLayout(
      sidebarPanel(
        sliderInput(inputId = "range", "Set range", 1, 10, 5, 1)

      ),


      mainPanel(
        DT::dataTableOutput("table")
      )
   )
)

server <- function(input, output) {

  dfr <- data.frame(var1 <- c(1,2,3),
                    var2 <- c(11, 22, 33))

  output$table <- DT::renderDataTable(
    datatable(dfr, extensions = 'Buttons', 
              class="cell-border stripe", 
              rownames = FALSE, colnames = c("var1", "var2"),
              options = list(dom = "Blfrtip",
                             buttond = list("copy", list(extend = "collection",
                             buttons = c("csv", "excel", "pdf"), 
                             text = "Download")), pageLength=10, autoWidth = TRUE, 
                             searchHighlight = TRUE, filter = "top"))
  )

}

shinyApp(ui = ui, server = server)

您可以将数据框的内容和其他信息保存在一个列表中,然后保存该列表。

或者,任何 R 对象都可以具有完全任意且受您控制的属性。您可以设置数据框的属性来记录您想要的信息。

就个人而言,我会使用列表方法,纯粹是因为我不喜欢属性。

下面是对 OP 请求的回应。

library(shiny)
library(DT)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      sliderInput(inputId = "range", "Set range", 1, 10, 5, 1),
      actionButton("saveRds", "Save to Rds"),
      actionButton("loadRds", "Load from Rds")
    ),
    mainPanel(
      DT::dataTableOutput("table"),
      wellPanel(h4("Current data"), verbatimTextOutput("text")),
      wellPanel(h4("File data"), verbatimTextOutput("loadedData"))
    )
  )
)

server <- function(input, output) {
  dfr <- data.frame(var1 <- c(1,2,3),
                    var2 <- c(11, 22, 33))

  output$table <- DT::renderDataTable(
    datatable(dfr, extensions = 'Buttons',
              class="cell-border stripe",
              rownames = FALSE, colnames = c("var1", "var2"),
              options = list(dom = "Blfrtip",
                             buttond = list("copy", list(extend = "collection",
                                                         buttons = c("csv", "excel", "pdf"),
                                                         text = "Download")), pageLength=10, autoWidth = TRUE,
                             searchHighlight = TRUE, filter = "top"))
  )

  listInfo <- reactive({
    list("data"=dfr, "version"="WebApp Version 1.0", "runDate"=date(), "sliderValue"=input$range)
  })

  output$text <- renderPrint({
    listInfo()
  })

  observeEvent(input$saveRds, {
    saveRDS(listInfo(), "data.Rds")
  })

  fileData <- reactive({
    req(input$loadRds)
    readRDS("data.Rds")
  })

  output$loadedData <- renderPrint({
    fileData()
  })
}
shinyApp(ui = ui, server = server)

您实施 "save to file" 的方式将取决于文件格式:例如,Excel 文件显然与 PDF 文件有不同的要求。作为最简单的演示,我在边栏中创建了 "Save to Rds" 和 "Load from RDS" 按钮,并添加了 verbatimTextOutput 以在加载文件时显示文件内容。 [我对 DT 不够熟悉,不知道如何在 table 工具栏中添加按钮。]

OP 的努力非常接近:只是将列表写入 CSV 文件比调用 write.csv...

需要更多的努力