簡體   English   中英

閃亮編輯后如何下載數據表

[英]How to download datatable after editing in shiny

我在一個閃亮的應用程序的數據表中有大約2萬張圖像。 我想刪除我不喜歡的圖像,然后下載結果數據表(僅包含我想要的圖像的路徑名)。

我設法看到一個數據框,每一行都顯示一張圖像。 我可以刪除不喜歡的行。 我現在希望能夠將數據框(僅包含文件路徑而不是實際圖像)下載到csv中。 我似乎無法使用downloadHandler做到這一點。 我想念什么?

這是我的代碼:

server.R

library(shiny)
library(shinydashboard)
library(data.table)
library(DT)
server<-shinyServer(function(input, output) {
  vals<-reactiveValues()
  vals$Data<-data.table(
    df
  )

  output$MainBody<-renderUI({
    fluidPage(
      box(width=12,
          hr(),

          column(12,dataTableOutput("Main_table")),
          tags$script(HTML('$(document).on("click", "input", function () {
                           var checkboxes = document.getElementsByName("row_selected");
                           var checkboxesChecked = [];
                           for (var i=0; i<checkboxes.length; i++) {
                           if (checkboxes[i].checked) {
                           checkboxesChecked.push(checkboxes[i].value);
                           }
                           }
                           Shiny.onInputChange("checked_rows",checkboxesChecked);
  })')),
      tags$script("$(document).on('click', '#Main_table button', function () {
                  Shiny.onInputChange('lastClickId',this.id);
                  Shiny.onInputChange('lastClick', Math.random())
});")

      )
      )
    })



  output$downloadData <- downloadHandler(
    filename = function() {
      paste(input$Main_table, ".csv", sep = "")
    },
    content = function(file) {
      write.csv(vals$Data, file, row.names = FALSE)
    }
  )

  output$Main_table<-renderDataTable({
    DT=vals$Data
    datatable(DT,
              escape=F)}
      )


})

ui.R

ui<-fluidPage(dashboardHeader(disable = T),
                  dashboardSidebar(disable = T),
                  downloadLink("downloadData", "Download"),
                  dashboardBody(uiOutput("MainBody")

                  )
)
# Run the application
shinyApp(ui = ui, server = server)

問題在於df是來自library(stats)的函數。 請參閱?df 請不要將df用作變量名-這只會引起混亂; DF 你裹此功能為data.table()並將它傳遞到reactiveValue (見print()我加的)。

write.csv()將此結構視為list() ,它不知道如何處理list()導致以下錯誤:

write.table中的錯誤:“ EncodeElement”中未實現的類型“ list”

因此,您可能想通過例如傳遞NULL而不是df來修復data.table初始化:

library(shiny)
library(shinydashboard)
library(data.table)
library(DT)

server <- shinyServer(function(input, output) {

  vals <- reactiveValues(myTabData = data.table(NULL))
  vals$Data <- data.table(df)

  print(paste("myData:", isolate(vals$Data)))

  output$MainBody <- renderUI({
    fluidPage(box(
      width = 12,
      hr(),

      column(12, dataTableOutput("Main_table")),
      tags$script(
        HTML(
          '$(document).on("click", "input", function () {
                           var checkboxes = document.getElementsByName("row_selected");
                           var checkboxesChecked = [];
                           for (var i=0; i<checkboxes.length; i++) {
                           if (checkboxes[i].checked) {
                           checkboxesChecked.push(checkboxes[i].value);
                           }
                           }
                           Shiny.onInputChange("checked_rows",checkboxesChecked);})'
        )
      ),
      tags$script(
        "$(document).on('click', '#Main_table button', function () {
                  Shiny.onInputChange('lastClickId',this.id);
                  Shiny.onInputChange('lastClick', Math.random())});"
      )

    ))
  })



  output$downloadData <- downloadHandler(
    filename = function() {
      "Main_table.csv"
    },
    content = function(file) {
      write.csv(vals$myTabData, file, row.names = FALSE)

      # Warning: Error in write.table: unimplemented type 'list' in 'EncodeElement'
      # write.csv(vals$Data, file, row.names = FALSE)
    }
  )

  output$Main_table <- renderDataTable({
    DT = vals$Data
    datatable(DT, escape = FALSE)
  })


})

ui <- fluidPage(
  dashboardHeader(disable = T),
  dashboardSidebar(disable = T),
  downloadLink("downloadData", "Download"),
  dashboardBody(uiOutput("MainBody"))
)

shinyApp(ui = ui, server = server)

此外,您應該修復文件名( input$Main_table不存在)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM