Я создаю блестящее приложение, которое будет использоваться несколькими людьми для просмотра и редактирования данных в табличном формате. Я хочу, чтобы пользователь мог редактировать один или несколько столбцов одновременно. Для этого я использовал пакет 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, ...]"