使用其他信息保存DT表(发光)

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

我想知道是否可以将DT表的内容以及一些不属于数据框/表的其他信息一起保存,例如应用程序版本号,执行日期,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)

shiny dt
1个回答
0
投票

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

或者,任何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)

实现“保存到文件”的方式将取决于文件格式:例如,Excel文件显然与PDF文件具有不同的要求。作为最小的演示,我在侧栏中创建了“保存到Rds”和“从RDS加载”按钮,并添加了一个verbatimTextOutput以在加载文件时显示文件的内容。 [我对DT不够熟悉,不知道如何在表格工具栏中添加按钮。]

OP的工作量非常接近:只是将列表写入CSV文件比仅调用write.csv ...要花费更多的精力>

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