在闪亮的应用程序中编辑后,数据表消失

时间:2019-06-11 16:13:28

标签: r shiny

我正在尝试使用闪亮的应用程序制作可编辑和可下载的数据表。编辑表后,数据表由于某种原因会自动消失。仅当数据dat是反应性的(这在我的应用程序中是必需的)时才会发生。

有人知道发生了什么吗?非常感谢。

以下示例代码:

library(shiny)
library(DT)

ui <- fluidPage(
    selectInput("nrow",
                "num of rows",
                choices = 1:5,
                selected = 3,
                multiple = FALSE),
    DTOutput("table")
)

server <- function(input, output){

    dat = reactive({
        iris[1:as.integer(input$nrow),]
    })

    output[["table"]] <- renderDT({
        datatable(dat(), editable = "cell", extensions = "Buttons", 
                  options = list(
                      dom = "Bfrtip",
                      buttons = list(
                          "csv"
                      )
                  ))
    })

    observeEvent(input[["table_cell_edit"]], {
        cellinfo <- input[["table_cell_edit"]]
        dat() <<- editData(dat(), input[["table_cell_edit"]], "table")
    })


}

shinyApp(ui, server)

2 个答案:

答案 0 :(得分:0)

尝试一下:

library(shiny)
library(DT)

ui <- fluidPage(
  selectInput("nrow","num of rows",choices = 1:5,selected = 3,multiple = FALSE),
  DTOutput("table")
)

server <- function(input, output){

  v <- reactiveValues()
  observeEvent(input$nrow,{
    v$dat <- iris[1:as.integer(input$nrow),]
  })

  output[["table"]] <- renderDT({
    datatable(v$dat, editable = "cell", extensions = "Buttons", options = list(dom = "Bfrtip",buttons = list("excel")))
  })

  observeEvent(input[["table_cell_edit"]], {
    cellinfo <- input[["table_cell_edit"]]
    v$dat <<- editData(v$dat, input[["table_cell_edit"]], "table")
  })
}

shinyApp(ui, server)

答案 1 :(得分:0)

这样可以吗?可能的不良行为是在更改行数后重置了表。但是我认为我们不能避免...因为这是两个不同的表。

library(shiny)
library(DT)

ui <- fluidPage(
  selectInput("nrow",
              "num of rows",
              choices = 1:5,
              selected = 3,
              multiple = FALSE),
  DTOutput("table")
)

server <- function(input, output){

  dat0 <- iris
  dat <- reactiveVal()
  observe({
    dat(dat0[1:as.integer(input$nrow),])
  })

  output[["table"]] <- renderDT({
    datatable(dat(), editable = "cell", extensions = "Buttons", 
              options = list(
                dom = "Bfrtip",
                buttons = list(
                  "csv"
                )
              ))
  })

  observeEvent(input[["table_cell_edit"]], {
    cellinfo <- input[["table_cell_edit"]]
    dat(editData(dat(), input[["table_cell_edit"]], "table"))
  })


}

shinyApp(ui, server)