Estoy tratando de generar un archivo HTML en rmarkdown con dos tablas generadas con el paquete 'DT'. El objetivo es darle al usuario las herramientas para copiar filas de una tabla a otra tabla y vaciar una de las tablas de filas con el clic de tres botones.
Esto sería bastante simple si pudiera usar Shiny, pero dado que necesito un archivo HTML independiente con esta funcionalidad, Shiny no es una opción. He estado intentando hacer que esto funcione con JS en la función de devolución de llamada, pero sin éxito.
Supongo que necesito tres funciones para hacer esto:
A continuación se muestra un ejemplo mínimo reproducible.
--- title: "" output: html_document: self_contained: false --- ```{r, include=FALSE} knitr::opts_chunk$set(fig.width=8, fig.height=6, echo=FALSE, warning=FALSE, message=FALSE) library(DT) library(dplyr) ``` *** <div class = "row"> <div class = "col-md-6"> <button type="button" class="btn btn-default btn-sm"> <span class="glyphicon glyphicon-arrow-right" aria-hidden="true"></span> Move selected rows in table 1 to table 2 </button> ```{r , echo = FALSE} library(DT) dt1 = mtcars[1:5,1:3] dt2 = dt1 datatable(dt1, elementId = "table1", caption = "Table 1", extensions = c("Select"), options = list( select = list(style = "multi"), dom = "t" ) ) ``` </div> <div class = "col-md-6"> <button type="button" class="btn btn-default btn-sm"> Remove selected rows in table 2 </button> <button type="button" class="btn btn-default btn-sm"> Remove all rows in table 2 </button> ```{r , echo = FALSE} datatable(dt2 %>% slice(1), caption = "Table 2", elementId = "table2", extensions = c("Select", "Buttons"), options = list( select = list(style = "multi"), dom = "tB", buttons = list( list( title = NULL, extend = "excel", text = 'Save as Excel', filename = "selected_variables" ) ) ) ) ``` </div>He hecho la primera parte: mover las filas seleccionadas. Esto debería ayudarte a hacer las otras partes. Hazme un ping si tienes alguna pregunta.
--- title: "" output: html_document: self_contained: false --- ```{r, include=FALSE} knitr::opts_chunk$set( fig.width=8, fig.height=6, echo=FALSE, warning=FALSE, message=FALSE ) library(DT) library(dplyr) ``` *** <div class = "row"> <div class = "col-md-6"> <button id="btn_move" type="button" class="btn btn-default btn-sm"> <span class="glyphicon glyphicon-arrow-right" aria-hidden="true"></span> Move selected rows in table 1 to table 2 </button> ```{r , echo = FALSE} library(DT) dt1 = mtcars[1:5,1:3] dt2 = dt1 callback1 <- c( "var table2;", "setTimeout(function(){table2 = $('#table2').find('table').DataTable();});", "$('#btn_move').on('click', function(){", " var selectedRows = table.rows({selected: true});", " var indices = selectedRows[0];", " var rowsData = selectedRows.data();", " for(var i=0; i<indices.length; i++){", " var data = rowsData[i];", " table2.row.add(data).draw();", " table.row(indices[i]-i).remove().draw();", " }", "});" ) datatable(dt1, elementId = "table1", caption = "Table 1", extensions = "Select", selection = "none", callback = JS(callback1), options = list( select = list(style = "multi"), dom = "t" ) ) ``` </div> <div class = "col-md-6"> <button type="button" class="btn btn-default btn-sm"> Remove selected rows in table 2 </button> <button type="button" class="btn btn-default btn-sm"> Remove all rows in table 2 </button> ```{r , echo = FALSE} datatable(dt2 %>% slice(1), caption = "Table 2", elementId = "table2", extensions = c("Select", "Buttons"), selection = "none", options = list( select = list(style = "multi"), dom = "tB", buttons = list( list( title = NULL, extend = "excel", text = 'Save as Excel', filename = "selected_variables" ) ) ) ) ``` </div>