valor una tabla seleccionar obtener fila datos con celda botones agregar javascript r shiny dt

javascript - tabla - Agregar botón de radio para seleccionar una fila de DataTable en Shiny



seleccionar una fila de un datatable c# (1)

Necesito agregar radiButtons para seleccionar filas en Data, es decir, el radiobutton elegido debe pasarse a la entrada. No puedo usar la selección de filas incorporadas en DT. Realmente necesito usar botones de radio para seleccionar la fila. Esto es lo que se quiere:

Usando https://yihui.shinyapps.io/DT-radio/ Puedo seleccionar COLUMNAS. Es:

library(shiny) library(DT) shinyApp( ui = fluidPage( title = ''Radio buttons in a table'', DT::dataTableOutput(''foo''), verbatimTextOutput("test") ), server = function(input, output, session) { m = matrix( c(round(rnorm(24),1), rep(3,12)), nrow = 12, ncol = 3, byrow = F, dimnames = list(month.abb, LETTERS[1:3]) ) for (i in seq_len(nrow(m))) { m[i, 3] = sprintf( if_else(i == 1, ''<input type="radio" name="%s" value="%s" checked="checked"/>'', ''<input type="radio" name="%s" value="%s"/>''), "C", month.abb[i] ) } m=t(m) output$foo = DT::renderDataTable( m, escape = FALSE, selection = ''none'', server = FALSE, options = list(dom = ''t'', paging = FALSE, ordering = FALSE), callback = JS("table.rows().every(function() { var $this = $(this.node()); $this.attr(''id'', this.data()[0]); $this.addClass(''shiny-input-radiogroup''); }); Shiny.unbindAll(table.table().node()); Shiny.bindAll(table.table().node());") ) output$test <- renderPrint(str(input$C)) } )

El resultado es:

Ingenuamente, intenté eliminar m = t (m) y cambiar las filas por columnas en la devolución de llamada. Esto no funciona porque la función de devolución de llamada en el ejemplo está agregando clase e identificación a la última, que no tienen contrapartida para la columna.

¿Alguna idea?


Una solución "sucia" podría ser envolver toda la tabla de datos en un div con la ID C y la clase de shiny-input-radiogroup :

shinyApp( ui = fluidPage( title = ''Radio buttons in a table'', tags$div(id="C",class=''shiny-input-radiogroup'',DT::dataTableOutput(''foo'')), verbatimTextOutput("test") ), server = function(input, output, session) { m = matrix( c(round(rnorm(24),1), rep(3,12)), nrow = 12, ncol = 3, byrow = F, dimnames = list(month.abb, LETTERS[1:3]) ) for (i in seq_len(nrow(m))) { m[i, 3] = sprintf( if_else(i == 1, ''<input type="radio" name="%s" value="%s" checked="checked"/>'', ''<input type="radio" name="%s" value="%s"/>''), "C", month.abb[i] ) } m output$foo = DT::renderDataTable( m, escape = FALSE, selection = ''none'', server = FALSE, options = list(dom = ''t'', paging = FALSE, ordering = FALSE) ) output$test <- renderPrint(str(input$C)) } )