我有这份载有两份备选办法手册和《Tiempo Real》的资料。
备选办法手册:在选择手册时,你将选择Fecha Inicio和Fecha Fin,你可以提出两种选择:Lanzar Consulta或Cancelar Consulta。 第一是建立一个数据框架,有两栏“Fcha”和“valor”,第二栏则在你想要第一个纽扣时使用(例如,你错了日期)。
选择Tiempo Real:在你选择时,你有材料Switch(Switch)(每5秒)在你点首点(Lanzar Consulta)时重新找回,而Cancelar Consulta Button则将被用来阻止材料S withch的实时复读。
而且,当选择手册改写时,我要说的是真实的,反之亦然,结果是干净的。
因此,我希望达到这一条件,但光辉的法典却看不到。 我不得不质疑改变选择和执行取消的纽特。
library(shiny)
library(shinyjs)
library(shinyWidgets)
library(lubridate)
ui <- fluidPage(
useShinyjs(),
sidebarPanel(
selectInput("fecha", "Fecha", choices = c("Manual", "Tiempo Real")),
conditionalPanel("input.fecha == Manual ",
airDatepickerInput("ini_manual", label = "Fecha Inicio", value = Sys.time() - 3 * (60 * 60),
addon = none , timepicker = TRUE, firstDay = 1,
width = "200px", autoClose = TRUE, timepickerOpts = timepickerOptions(timeFormat = "hh:ii")),
airDatepickerInput("fin_manual", label = "Fecha Fin", value = Sys.time(),
addon = none , timepicker = TRUE, firstDay = 1,
width = "200px", autoClose = TRUE, maxDate = NULL, timepickerOpts = timepickerOptions(timeFormat = "hh:ii"))
),
conditionalPanel("input.fecha == Tiempo Real ",
materialSwitch(inputId = "refresh", label = "Tiempo Real", value = TRUE, status = "success")
),
actionButton("btnConsulta", "Lanzar Consulta"),
actionButton("btnCancelarConsulta", "Cancelar Consulta")
),
mainPanel(
tableOutput("tablaResultado")
)
)
server <- function(input, output, session) {
# Reactive variable to store the last update time in real time
last_refresh_time <- reactiveVal(NULL)
# Reactive event for query button and real time
consulta_evento <- eventReactive(input$btnConsulta,
{
if (input$fecha == "Manual") {
# Get fecha_ini and fecha_fin
fecha_ini <- input$ini_manual
fecha_fin <- input$fin_manual
# Make data frame
resultado <- data.frame(
fecha = as.character(seq.POSIXt(from = fecha_ini, to = fecha_fin, by = "hour")),
Valor = rnorm(length(seq.POSIXt(from = fecha_ini, to = fecha_fin, by = "hour")))
)
resultado
} else {
last_refresh_time(Sys.time())
# Realizar la lógica de la consulta para tiempo real aquí
consulta_tiempo_real <- data.frame(
fecha = as.character(seq.POSIXt(from = Sys.time(), by = "hour", length.out = 5)),
Valor = rnorm(5)
)
consulta_tiempo_real
}
}
)
# Update real time with JS
observe({
if (input$fecha == "Tiempo Real" && input$refresh == TRUE) {
shinyjs::runjs(
consultaInterval = setInterval(function() { Shiny.setInputValue("btnConsulta", Math.random(), {priority: "event"}); }, 5000);
)
}
else if (input$fecha == "Tiempo Real" && input$refresh == FALSE){
shinyjs::runjs( clearInterval(consultaInterval); )
output$tablaResultado <- renderTable({
data.frame(NULL)
})
}
else{
consulta_evento()
}
})
output$tablaResultado <- renderTable({
req(input$btnConsulta)
consulta_evento()
})
}
shinyApp(ui, server)
我要就如何处理这一问题获得指导。