library(shiny)
## Warning: package 'shiny' was built under R version 4.2.3
library(DT)
## Warning: package 'DT' was built under R version 4.2.3
##
## Attaching package: 'DT'
## The following objects are masked from 'package:shiny':
##
## dataTableOutput, renderDataTable
# Datos iniciales
initial_data = data.frame(
Nombre = character(),
Cedula = character(),
Temperatura = numeric(),
Sintomas = logical(),
Contacto = logical(),
Viaje = logical(),
stringsAsFactors = FALSE
)
# Funciones para guardar y cargar datos
save_data = function(data) {
tryCatch({
write.csv(data, "data.csv", row.names = FALSE)
message("Datos guardados exitosamente en data.csv")
}, error = function(e) {
message("Error al guardar datos: ", e$message)
})
}
load_data = function() {
if (file.exists("data.csv")) {
tryCatch({
data = read.csv("data.csv", stringsAsFactors = FALSE)
message("Datos cargados exitosamente desde data.csv")
return(data)
}, error = function(e) {
message("Error al cargar datos: ", e$message)
return(initial_data)
})
} else {
message("El archivo data.csv no existe, utilizando datos iniciales.")
return(initial_data)
}
}
# Cargar datos al inicio
data = reactiveVal(load_data())
## Datos cargados exitosamente desde data.csv
# UI
ui = fluidPage(
titlePanel("Registro de Ingreso"),
sidebarLayout(
sidebarPanel(
textInput("nombre", "Nombre:"),
textInput("cedula", "Cédula:"),
numericInput("temperatura", "Temperatura:", value = 36.5, min = 35, max = 40, step = 0.1),
checkboxInput("sintomas", "Síntomas:", value = FALSE),
checkboxInput("contacto", "Contacto con positivos:", value = FALSE),
checkboxInput("viaje", "Viaje reciente:", value = FALSE),
actionButton("agregar", "Agregar/Actualizar"),
actionButton("borrar", "Borrar"),
downloadButton("descargarPDF", "Descargar PDF")
),
mainPanel(
DTOutput("tabla")
)
)
)
# Server
server = function(input, output, session) {
observeEvent(input$agregar, {
new_row = data.frame(
Nombre = input$nombre,
Cedula = input$cedula,
Temperatura = input$temperatura,
Sintomas = input$sintomas,
Contacto = input$contacto,
Viaje = input$viaje,
stringsAsFactors = FALSE
)
existing_row = which(data()$Cedula == input$cedula | data()$Nombre == input$nombre)
if (length(existing_row) == 0) {
data(rbind(data(), new_row))
} else {
updated_data = data()
updated_data[existing_row, ] = new_row
data(updated_data)
}
save_data(data())
})
observeEvent(input$borrar, {
existing_row = which(data()$Cedula == input$cedula | data()$Nombre == input$nombre)
if (length(existing_row) > 0) {
updated_data = data()
updated_data = updated_data[-existing_row, ]
data(updated_data)
save_data(data())
}
})
output$tabla = renderDT({
datatable(data(), options = list(autoWidth = TRUE, scrollX = TRUE))
})
output$descargarPDF = downloadHandler(
filename = function() {
paste("Listado_Personas_", Sys.Date(), ".pdf", sep = "")
},
content = function(file) {
tempData = data()
write.csv(tempData, file, row.names = FALSE)
}
)
}
# Inicia la aplicación Shiny
shinyApp(ui, server)
Shiny applications not supported in static R Markdown documents