tutorial publicar examples ejemplos app r shiny

publicar - shiny r tutorial



Obtener la fila seleccionada de DataTable en la aplicaciĆ³n Shiny (4)

El método R que representa una DataTable tiene un parámetro que define el modo de selección. Por ejemplo:

output$table1 <- DT::renderDataTable(dataSet, selection = ''single'')

Los valores posibles son (''múltiple'' es el valor predeterminado):

  • ninguna
  • soltero
  • múltiple

Para mayor referencia, puede ver: http://rstudio.github.io/DT/shiny.html

EDITAR 14/04/2016

En la configuración que uso trabajando con el modo de selección única tiene problemas.

Aquí está la versión que uso:

> DT:::DataTablesVersion [1] "1.10.7" > packageVersion("DT") [1] ‘0.1’

El problema al que me enfrenté es que visualmente tienes una selección de una sola fila, pero cuando lo haces:

observeEvent(input$table1_rows_selected, { str(input$table1_rows_selected) })

Obtendrá una lista con todas las filas que fueron seleccionadas pero que no fueron deseleccionadas explícitamente. En otras palabras, seleccionar una nueva fila no anula automáticamente la selección de la fila anterior en la lógica interna de Datatables. Esto también podría deberse al envoltorio DT, no estoy seguro.

Esta es la razón por la que actualmente, como solución alternativa, utilizamos JS para esto:

$(document).on(''click'', ''#table1 table tr'', function() { var selectedRowIds = $(''#table1 .dataTables_scrollBody table.dataTable'').DataTable().rows(''.selected'')[0]; var selectedId = ""; if (selectedRowIds.length === 1) { selectedId = $(this).children(''td:eq(0)'').text(); } else { $(''#table1 tbody tr'').removeClass(''selected''); } Shiny.onInputChange("table1_selected_id", selectedId); });

Una vez que tenga esto en su lugar, podrá hacer:

observeEvent(input$table1_selected_id, { str(input$table1_selected_id) })

Esto ahora al menos envía datos correctos a su código server.R. Lamentablemente, todavía tendrá un problema con la tabla porque internamente realiza un seguimiento de las filas seleccionadas y si cambia de página, restaurará una selección incorrecta. Pero al menos esto es un defecto visual y tu código tendrá la posibilidad de funcionar correctamente. Entonces esta solución realmente necesita más trabajo.

Quiero modificar esta aplicación:

https://demo.shinyapps.io/029-row-selection/

para que solo se pueda seleccionar una fila a la vez, y para que pueda adquirir el elemento en la primera columna de la fila seleccionada para trazar los datos con. ¿Alguien sabe como hacer esto?


El siguiente código muestra un marco de datos en formato de tabla DT. Los usuarios podrán seleccionar una sola fila. La fila seleccionada se recupera y muestra. puede escribir su función de trazado en el bloque de trazado en el servidor.

Espero que esto ayude !!

# Server.R shinyServer(function(input, output,session) { output$sampletable <- DT::renderDataTable({ sampletable }, server = TRUE,selection = ''single'') output$selectedrow <- DT::renderDataTable({ selectedrowindex <<- input$sampletable_rows_selected[length(input$sampletable_rows_selected)] selectedrowindex <<- as.numeric(selectedrowindex) selectedrow <- (sampletable[selectedrowindex,]) selectedrow }) output$plots <- renderPlot({ variable <- sampletable[selectedrowindex,1] #write your plot function }) }) #ui.R shinyUI(navbarPage( "Single Row Selection", tabPanel("Row selection example", sidebarLayout(sidebarPanel("Parameters"), mainPanel( DT::dataTableOutput("selectedrow"), DT::dataTableOutput("sampletable") )) ) )) # global.R library(DT) library(shiny) selectedrowindex = 0


Esta no es una solución directa al ejemplo que ha publicado, sin embargo, da respuesta con otro ejemplo.

Hay un ejemplo descargable de aplicación brillante dado y discutido en el siguiente enlace, ¡ haga clic aquí ! para seleccionar una sola fila en una tabla utilizando un parámetro de clase.


ACTUALIZAR: ahora puede acceder a las filas seleccionadas con la input$tableId_rows_selected in server.R . Mira aquí para más detalles.

Para seleccionar una fila única, puede cambiar la función de devolución de llamada de su ejemplo a esta:

callback = "function(table) { table.on(''click.dt'', ''tr'', function() { table.$(''tr.selected'').removeClass(''selected''); $(this).toggleClass(''selected''); Shiny.onInputChange(''rows'', table.rows(''.selected'').data()[0][0]); }); }"

Cuando haces clic en una fila, básicamente elimina las filas seleccionadas (tienen la clase .selected) y selecciona la fila en la que hiciste clic.

También cambié el código en la función Shiny.onInputChange para que devuelva el número en la primera columna.