保存 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
...
需要更多的努力
我想知道是否可以将 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
...