es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo tener una tabla DT editable al usar Flexdashboard con Shiny?

No sé si este es el enfoque correcto, pero cualquier orientación es muy apreciada. Tengo una tabla en la que en uno de mis flexdashboard mostraré aplicaciones. Esta tabla muestra ID, fecha de recepción y un estado que está en blanco.

Me gustaría que el usuario ingrese un estado una vez que vea la solicitud y que ese estado se guarde en la tabla. Puedo hacer esto con editable=TRUE, pero no se guarda cuando vuelvo a cargar mi aplicación shiny.

¿Cuál es el mejor enfoque para esto?

Imagen

Código


title: “TABLA DE AUTOMÓVILES”
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill

runtime: shiny

“`{r setup, include=FALSE}
library(flexdashboard)
library(shiny)
library(DT)

<pre><code><br />Column {data-width=650}
———————————————————————–

### Gráfico A

“`{r}

data <- data.frame(id = c(12456,12457,12458,12459,12569,23456),
fecha_recibida = c(“10/25/2021”, “10/05/2021″,”11/25/2021″,”11/25/2021″,”11/25/2021″,”10/22/2021”),
estado = c(“”,””,””,””,””,””))

datatable(data,
editable = TRUE,
options = list(
columnDefs = list(list(className = ‘dt-center’, targets = “_all”)))
)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Un enfoque para guardar el estado ingresado por el usuario sería utilizar un objeto reactiveValues para almacenar los datos actualizados de la tabla y luego escribirlo en un archivo o en una base de datos cuando se cierre la aplicación.

    Por ejemplo, podrías agregar el siguiente código a tu configuración existente:

    “`{r setup, include=FALSE}
    library(flexdashboard)
    library(shiny)
    library(DT)

    Cargar los datos guardados si existen, o de lo contrario, utilizar datos predeterminados

    if (file.exists(“data.csv”)) {
    data <- read.csv(“data.csv”)
    } else {
    data <- data.frame(id = c(12456,12457,12458,12459,12569,23456),
    date_recived = c(“10/25/2021”, “10/05/2021″,”11/25/2021″,”11/25/2021″,”11/25/2021″,”10/22/2021”),
    status = c(“”,””,””,””,””,””))
    }

    Crear un objeto reactiveValues para almacenar los datos actualizados

    rv <- reactiveValues(data = data)

    Guardar los datos de la tabla en un archivo cuando se cierre la aplicación

    session$onSessionEnded(function() {
    write.csv(rv$data, “data.csv”, row.names = FALSE)
    })


    Luego, en tu código de `datatable()`, deberías actualizar la entrada y salida para utilizar el objeto reactiveValues: ```{r} datatable(rv$data, editable = TRUE, options = list( columnDefs = list(list(className = 'dt-center', targets = "_all"))) ) %>% observeEvent(input$rv$data_cell_edit, { rv$data <<- editData(rv$data, input$rv$data_cell_edit, "rv$data") })

    La función observeEvent() escucha los cambios en el objeto rv$data y lo actualiza en consecuencia cuando el usuario edita la tabla. El operador <<- se utiliza para asignar los datos actualizados al objeto reactiveValues. Por último, se llama a la función write.csv() en la función session$onSessionEnded() para guardar los datos actualizados en un archivo cuando se cierra la aplicación.

    Este enfoque debería permitir al usuario actualizar la tabla y que los cambios persistan en las sesiones de la aplicación. Sin embargo, es importante tener en cuenta que este puede no ser el enfoque más eficiente o seguro, especialmente si la aplicación maneja datos sensibles. En tales casos, puede ser necesario implementar medidas de seguridad adicionales, como autenticación y autorización de usuarios, para garantizar la seguridad e integridad de los datos.

Comments are closed.