r dataTable сохранить как RDS, а не как jso - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь следовать этому примеру из dataTable github , который (насколько я понимаю) сохраняет отредактированные пользователем данные DataTable на сервер. Тем не менее, я хотел бы сохранить его как RDS вместо JSON файла.

Пример кода DT:

library(shiny)
library(DT)
shinyApp(
  ui = fluidPage(
    DTOutput('x1')
  ),
  server = function(input, output, session) {
    x = iris
    x$Date = Sys.time() + seq_len(nrow(x))
    output$x1 = renderDT(x, selection = 'none', editable = TRUE)

    proxy = dataTableProxy('x1')

    observeEvent(input$x1_cell_edit, {
      info = input$x1_cell_edit
      str(info)
      i = info$row
      j = info$col
      v = info$value
      x[i, j] <<- DT::coerceValue(v, x[i, j])
      replaceData(proxy, x, resetPaging = FALSE)  # important
    })
  }
)

Я могу читать в своем собственном RDS нормально, и dataTable Похоже, что редактировать это нормально, но я не могу понять, как сохранить изменения обратно в исходный RDS. Есть идеи?

Немного предыстории. Я пытаюсь настроить файл настроек для моего блестящего приложения. Я хочу, чтобы одни и те же настройки были постоянными и применялись ко всем пользователям (обоим), чтобы каждый пользователь мог редактировать файл настроек. Мне кажется, что наличие редактируемой таблицы данных является наиболее очевидным способом сделать это, но я открыт для других идей.

1 Ответ

0 голосов
/ 15 февраля 2020

Получается, что я ошибочно назвал свои переменные, поэтому они терпели неудачу. Как отметил А. Сулиман, прежде всего необходимо было добавить «saveRDS (x,« .rds »)». В качестве прощения за мои грехи я приведу прокомментированную версию приведенного выше примера кода с более понятными именами переменных. Надеюсь, что это может помочь другим людям.

library(shiny)
library(DT)
library(textclean)

shinyApp(

  ui = fluidPage(
    DTOutput('tableObject') # name of table object
  ),

  server = function(input, output, session) {
    inputData = readRDS("somewhere.rds") #read data in
    output$tableObject = renderDT(inputData, selection = 'none', editable = TRUE)

    proxy = dataTableProxy('tableObject')

    observeEvent(input$tableObject_cell_edit, { # replace tableObject with your variable name eg. input$example_cell_edit
      info = input$tableObject_cell_edit # and again
      str(info)
      i = info$row
      j = info$col
      v = info$value
      saveRDS(sRego, # save timestamped copy of old data
        mgsub(paste('settings/Rego ', Sys.time(), '.rds', sep = ""),
              pattern = c(":", " "),
              replacement = c("-", "_")))
      inputData[i, j] <<- DT::coerceValue(v, inputData[i, j]) # replace variable
      replaceData(proxy, inputData, resetPaging = FALSE) # replace variable
      saveRDS(inputData, "somewhere.rds") # write new data out

    })
  }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...