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

时间:2019-10-01 00:15:43

标签: r shiny dt

这是一个示例闪亮的应用程序,允许用户下载可编辑的表格。用户可以单击左上角的csv按钮下载表格。

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

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

尽管我仍然可以将表另存为csv文件,但警告消息却很烦人。

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

另一个问题是编辑单元格后,如果我选中/取消选中某些列,则编辑后的单元格将恢复其原始值。

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

非常感谢。

示例闪亮的应用程序如下:

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")
        })

    }
)

1 个答案:

答案 0 :(得分:1)

那是因为您正在与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下载整个表格,请参见this discussion