下载编辑后的数据 table 在闪亮的应用程序中发出警告

download edited data table gives warning in shiny app

这是一个允许用户下载 editable table 的 shiny 应用程序示例。用户可以点击左上角的csv按钮下载table。

但是,我发现在编辑table中的任何单元格后(通过双击任何单元格并修改内容),当我点击csv按钮时,输入文件名并保存,我收到如下警告消息:

dataTables warning: table id=DataTables_Table_3 - invalid json response. 
For more information about this error, please see http://datatables.net/tn/1

虽然我仍然能够将 table 保存为 csv 文件,但警告消息非常烦人。

这只会在我在 renderDT 函数中添加参数 server=FALSE 后发生。我需要 server=FALSE 的原因是没有这个,应用程序只下载文件夹的第一页(保存后丢失所有其余数据)。

另一个问题是在我编辑单元格后,如果我 check/uncheck 某些列,编辑后的单元格会恢复到其原始值。

有谁知道如何解决这些问题?

非常感谢。

Shiny 应用示例如下:

library(shiny)
library(DT)
library(dplyr)

shinyApp(
    # UI
    ui = fluidPage(DT::dataTableOutput('tbl'),
                   checkboxGroupInput('datacols', 
                                      label='Select Columns:',
                                      choices= c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width', 'Specie'),
                                      selected = c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width', 'Specie'),
                                      inline=TRUE )

                   ),

    # SERVER
    server = function(input, output) {



        df = reactiveValues()

        observe ({

            df$dat = iris %>% select(one_of(input$datacols))
        })
        # render DT
        output$tbl = renderDT(server=FALSE, {
                datatable(df$dat,
                editable = "cell",
                extensions = "Buttons",
                options = list(
                    dom = "Bfrtip", buttons = list("csv")))

        })


        observeEvent(input[["tbl_cell_edit"]], {
            cellinfo <- input[["tbl_cell_edit"]]
            df$dat  <- editData(df$dat,  input[["tbl_cell_edit"]], "tbl")
        })

    }
)

那是因为您使用 server = FALSE 的代理。你不应该。做

observeEvent(input[["tbl_cell_edit"]], {
  cellinfo <- input[["tbl_cell_edit"]]
  df$dat <- editData(df$dat,  input[["tbl_cell_edit"]])
})

而不是

observeEvent(input[["tbl_cell_edit"]], {
  cellinfo <- input[["tbl_cell_edit"]]
  df$dat <- editData(df$dat,  input[["tbl_cell_edit"]], "tbl")
})

如果要下载 server = TRUE 的整个 table,请参阅 this discussion