如何在 shiny 中编辑 table 列名称并保存 table 以供进一步分析?

How to edit table column names in shiny and save the table for further analysis?

我想在 shiny 中编辑 table 列名称并保存以供进一步分析。

我添加了一段代码,允许我在 table 中编辑 colnames。请看下面的例子。

这里用这个简单的例子。我可以通过双击来编辑列名。但我不知道如何保存编辑后的 ​​table 以便在 shiny 中进行进一步的数据分析。例如,将编辑后的 ​​table 保存在编辑操作按钮中。

非常感谢您的帮助。


library(shiny)
library(DT)

callback <- c(
  "var colnames = table.columns().header().to$().map(function(){return this.innerHTML;}).get();",
  "Shiny.onInputChange('colnames', colnames);",
  "table.on('dblclick.dt', 'thead th', function(e) {",
  "  var $th = $(this);",
  "  var index = $th.index();",
  "  var colname = $th.text(), newcolname = colname;",
  "  var $input = $('<input type=\"text\">')",
  "  $input.val(colname);",
  "  $th.empty().append($input);",
  "  $input.on('change', function(){",
  "    newcolname = $input.val();",
  "    if(newcolname != colname){",
  "      $(table.column(index).header()).text(newcolname);",
  "      colnames[index] = newcolname;",
  "      Shiny.onInputChange('colnames', colnames);",
  "    }",
  "    $input.remove();",
  "  }).on('blur', function(){",
  "    $(table.column(index).header()).text(newcolname);",
  "    $input.remove();",
  "  });",
  "});"
)

ui <- fluidPage(
  
  titlePanel("Need your help"),
  
  DTOutput("table"), 
  
  DTOutput("editedTable"),
  
  actionButton("save", label = "save")
)

server <- function(input, output){
  output$table <- renderDT({
    datatable(iris[1:3,], callback = JS(callback))
  }, server = FALSE)  
  
}

shinyApp(ui, server)

此 JavaScript 代码将列名发送到 input$colnames。你可以这样做:

server <- function(input, output){

  dataset <- iris[1:3, ]

  Dat <- reactiveVal(dataset)

  observeEvent(input$colnames, {
    Dat(setNames(Dat(), input$colnames))
  })

  output$table <- renderDT({
    datatable(dataset, callback = JS(callback))
  }, server = FALSE)  
  
}

使用此代码,反应值 Dat() 是具有已编辑列名称的数据集。