Как отредактировать столбец DT и сохранить изменения для запуска вычислений в зависимых столбцах? - PullRequest
0 голосов
/ 18 октября 2019

Я создаю блестящее приложение, которое будет использоваться несколькими людьми для просмотра и редактирования данных в табличном формате. Я хочу, чтобы пользователь мог редактировать один или несколько столбцов одновременно. Для этого я использовал пакет DT в R, но не могу понять, как сохранить изменения, внесенные в таблицу данных. Это очень важно, поскольку в других столбцах есть зависимые значения, которые необходимо пересчитать.

Если я установлю editable = TRUE, я могу изменить значение в одной ячейке, но это слишком медленно. Когда я устанавливаю editable = "column" или "all", я могу быстро редактировать несколько ячеек, но тогда изменения не сохранятся, независимо от того, сколько раз я нажму return.

В приведенном ниже примере все Iпытаюсь сделать, это распечатать отредактированные значения в консоли. Если значения появляются в переменной _cell_edit, тогда я могу использовать функцию editData для сохранения изменений.

Я еще не нашел ничего полезного в StackOverflow, но я нашел следующие два сообщения в блоге полезными.

https://blog.rstudio.com/2018/03/29/dt-0-4/ https://rstudio.github.io/DT/shiny.html


# TEST APP DT

library(DT)
library(shiny)
library(tidyverse)


# Define UI for application that draws a histogram
ui <- fluidPage(

  actionButton("save", "Click to Save Changes"),
  DTOutput("dt_table")

)

# Define server logic required to draw a histogram
server <- function(input, output, session) {

  data <- 
    data.frame(
      A = c("Ones", "Twos", "Threes", "Total"),
      B = c(1, 2, 3, 6),
      C = c(1, 2, 3, 6),
      stringsAsFactors = FALSE
    ) %>% mutate(D = B + C)

  live = reactiveValues(df = NULL)

  observe({
    live$df <- data
  })

  output$dt_table <- renderDataTable({
    datatable(
      live$df, 
      rownames = FALSE,
      editable = list(
        target = "column",
        disable = list(columns = c(1, 3))
      )
    )
  })

  proxy_dt_table <- dataTableProxy("dt_table")

  observeEvent(input$save, {
    info = input$dt_table_cell_edit
    str(info)
    row = info$row
    col = info$col
    val = info$value

    print(paste0("Row: ", row))
    print(paste0("Col: ", col))
    print(paste0("Val: ", val))

  })


}

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


Right now, the values in the _cell_edit variable are empty. 
  NULL
[1] "Row: "
[1] "Col: "
[1] "Val: "
I would like to see something like this:
 'data.frame': 200 obs. of 3 variables
[1] "Row: [1, 2, 3, 4, ...]"
[1] "Col: [1, 1, 1, 1, ...]"
[1] "Val: [5, 6, 7, 8, ...]"
...