Как я могу вызвать повторную визуализацию объекта данных при изменении имени столбца - PullRequest
0 голосов
/ 08 мая 2020

Рассмотрим следующий MWE:

library(shiny)
library(shinyjs)
library(shinymaterial)
library(data.table)


ui <- material_page(include_nav_bar = F,
                    material_row(id = "data-actions",
                                 material_column(width = 4, material_card(title = "Spalten umbenennen", divider = TRUE,
                                                                          material_dropdown(input_id = "renameOldColName", choices = NULL, label = "Spalte"),
                                                                          material_text_box(input_id = "renameNewColName", label = "Neuer Name"),
                                                                          material_button(input_id = "renameColumn", label = "Umbenennen"))),
                    ),
                    material_row(id = "data-preview",
                                 material_column(width = 12, material_card(title = "Vorschau", uiOutput("overview")))
                    ))

server <- function(input, output, session) {

  state <- reactiveValues()
  state$data <- setDT(mtcars)

  # Render datatable ui
  output$overview <- renderUI({
    validate(need(state$data, message = "Keine Vorschau verfügbar"))
    DT::dataTableOutput("overviewTable")
  })

  # Render datatable itself if data is available
  output$overviewTable <- DT::renderDataTable({
    state$data
  })

  # Rename columns
  observeEvent(state$data, {
    update_material_dropdown(session = session, "renameOldColName", choices = colnames(state$data), value=colnames(state$data)[1])
  })
  observeEvent(input$renameColumn, {
    req(input$renameNewColName, input$renameOldColName)
    setnames(state$data, old = (input$renameOldColName), new = (input$renameNewColName))
  })

}


viewer <- browserViewer()
runGadget(ui, server, viewer = viewer)

Это приложение позволяет вам переименовать столбец таблицы данных. Моя проблема в том, что это изменение не отражается в обновленном выводе данных.

Использование подхода dplyr с state$data %<>% rename(...) работает, но DT::setnames работает с указателями, я думаю.

Поскольку мой реальное приложение выполняет множество различных действий с таблицами данных с более чем 300 тыс. строк, я бы предпочел использовать data.table вместо dplyr.

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