闪亮的可下载表格
Downloadable tables in Shiny
问题: 下面是一个闪亮的玩具应用程序,我想从中下载 renderDataTable
表达式中 mtcars
的相应转换数据。我知道这个问题被问过一千次,但我找不到合理的解决方案,因为只能下载一个包含无用信息的 html 文件,或者使用此应用程序会引发错误。
非常感谢!
亮码
library(shiny)
library(DT)
library(data.table)
source("download_module.R")
ui <- fluidPage(
dataTableOutput("table"),
tableDownload_UI("download_data")
)
server <- function(input, output) {
output$table <- renderDataTable({
mt_dt <- as.data.table(mtcars)
mt_dt[, .N, by = .(cyl)]
})
callModule(tableDownload_server,
"download_data",
output$table,
file_name = "dieterdata.csv"
)
}
shinyApp(ui = ui, server = server)
下载模块
tableDownload_UI <- function(id, label = "Download data"){
ns <- NS(id)
downloadButton(ns("download_data"), label)
}
tableDownload_server <- function(input,
output,
session,
data_dev,
file_name){
output$download_data <- downloadHandler(
req(data_dev),
filename <- function(){
file_name
},
content <- function(file){
fwrite(data_dev, file)
}
)
}
您不能在另一个函数中使用输出的内容。这意味着您需要首先在 reactive
环境中操作您的数据,然后在任何您想要的地方使用这个反应式表达式。
此外,downloadHandler
中不需要使用req(data_dev)
。
这是更正后的代码:
library(shiny)
library(DT)
library(data.table)
tableDownload_UI <- function(id, label = "Download data"){
ns <- NS(id)
downloadButton(ns("download_data"), label)
}
tableDownload_server <- function(input, output, session, data_dev, file_name){
output$download_data <- downloadHandler(
filename = function(){
file_name
},
content = function(file){
fwrite(data_dev, file)
}
)
}
ui <- fluidPage(
dataTableOutput("table"),
tableDownload_UI("download_data")
)
server <- function(input, output) {
yourdata <- reactive({
mt_dt <- as.data.table(mtcars)
mt_dt[, .N, by = .(cyl)]
})
output$table <- renderDataTable({
yourdata()
})
callModule(tableDownload_server,
"download_data",
data_dev = yourdata(),
file_name = "dieterdata.csv"
)
}
shinyApp(ui = ui, server = server)
问题: 下面是一个闪亮的玩具应用程序,我想从中下载 renderDataTable
表达式中 mtcars
的相应转换数据。我知道这个问题被问过一千次,但我找不到合理的解决方案,因为只能下载一个包含无用信息的 html 文件,或者使用此应用程序会引发错误。
非常感谢!
亮码
library(shiny)
library(DT)
library(data.table)
source("download_module.R")
ui <- fluidPage(
dataTableOutput("table"),
tableDownload_UI("download_data")
)
server <- function(input, output) {
output$table <- renderDataTable({
mt_dt <- as.data.table(mtcars)
mt_dt[, .N, by = .(cyl)]
})
callModule(tableDownload_server,
"download_data",
output$table,
file_name = "dieterdata.csv"
)
}
shinyApp(ui = ui, server = server)
下载模块
tableDownload_UI <- function(id, label = "Download data"){
ns <- NS(id)
downloadButton(ns("download_data"), label)
}
tableDownload_server <- function(input,
output,
session,
data_dev,
file_name){
output$download_data <- downloadHandler(
req(data_dev),
filename <- function(){
file_name
},
content <- function(file){
fwrite(data_dev, file)
}
)
}
您不能在另一个函数中使用输出的内容。这意味着您需要首先在 reactive
环境中操作您的数据,然后在任何您想要的地方使用这个反应式表达式。
此外,downloadHandler
中不需要使用req(data_dev)
。
这是更正后的代码:
library(shiny)
library(DT)
library(data.table)
tableDownload_UI <- function(id, label = "Download data"){
ns <- NS(id)
downloadButton(ns("download_data"), label)
}
tableDownload_server <- function(input, output, session, data_dev, file_name){
output$download_data <- downloadHandler(
filename = function(){
file_name
},
content = function(file){
fwrite(data_dev, file)
}
)
}
ui <- fluidPage(
dataTableOutput("table"),
tableDownload_UI("download_data")
)
server <- function(input, output) {
yourdata <- reactive({
mt_dt <- as.data.table(mtcars)
mt_dt[, .N, by = .(cyl)]
})
output$table <- renderDataTable({
yourdata()
})
callModule(tableDownload_server,
"download_data",
data_dev = yourdata(),
file_name = "dieterdata.csv"
)
}
shinyApp(ui = ui, server = server)