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?
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”)))
)
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)
})
La función
observeEvent()
escucha los cambios en el objetorv$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ónwrite.csv()
en la funciónsession$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.