下载在renderTable中独立生成的表在R shiny中输出

fdbelqdn  于 2023-05-11  发布在  其他
关注(0)|答案(2)|浏览(109)

我尝试使用Rshiny中的renderTable函数生成一个表,然后使用downloadHandler函数将该表/data.frame下载为csv文件。不知何故,我一直得到以下错误:
下载期间发生错误:下载0303 bd 426 fce 88837 ae 277 aa 3b 406 dd时出错/download/downloadData?w= -服务器回复:内部服务器错误
下面是一个示例代码,我生成了一个简单的 Dataframe ,并尝试使用downloadHander下载它:

library(shiny)
 # Define UI for data download app ----
ui <- fluidPage(

    # App title ----
    titlePanel("Downloading Data"),

    # Sidebar layout with input and output definitions ----
    sidebarLayout(

        # Sidebar panel for inputs ----
        sidebarPanel(
            # Button
            downloadButton("downloadData", "Download")

        ),

        # Main panel for displaying outputs ----
        mainPanel(

            tableOutput("table")

        )

    )
)
# Define server logic to display and download selected file ----
server <- function(input, output) {

    # Table of selected dataset ----
    output$table <- renderTable({
        data.frame(a =c(1,2,3),b=c("q","s","f"))
    })

    # Downloadable csv of selected dataset ----
    output$downloadData <- downloadHandler(
        filename = function() {
            paste("test.csv")
        },
        content = function(file) {
            write.csv(output$table, file, row.names = FALSE)
        }
    )

}
shinyApp(ui,server)
vof42yt1

vof42yt11#

这里有几件事需要做:
1.如果你的应用要动态呈现数据,那么你的数据应该被分配给某个reactive表达式。

  • 现在数据的下载变得很容易,因为您只需调用(1)中编写的reactive表达式。
  • 上述第(1)和(2)点将确保用户下载的数据与屏幕上显示的数据相同。

尝试以下操作:

library(shiny)

ui <- fluidPage(
  titlePanel("Downloading Data"),
  sidebarLayout(
    sidebarPanel(downloadButton("downloadData", "Download")),
    mainPanel(tableOutput("table"))
  )
)

server <- function(input, output) {

  data <- shiny::reactive(data.frame(a = c(1, 2, 3), b = c("q", "s", "f")))
  output$table <- renderTable(data())

  output$downloadData <- downloadHandler(
    filename = function() {
      paste("test.csv")
    },
    content = function(file) {
      write.csv(data(), file, row.names = FALSE)
    }
  )

}
shinyApp(ui,server)
3z6pesqy

3z6pesqy2#

您不能导出renderTable{},因为这会将许多元素放入HTML中,您需要预先保存进入表中的数据并单独导出。

dataTable<-data.frame(a =c(1,2,3),b=c("q","s","f"))

output$downloadData <- downloadHandler(

  filename = function() {
    ('test.csv')
  }, 

  content = function(con) {
    write.table(dataTable,row.names = FALSE,col.names=T, sep=",",con)
  },
  contentType="csv"
)

相关问题