Sono nuovo di Shiny e sto lottando considerevolmente.Lucido: stampa dell'output della console su un oggetto di testo senza attendere che una funzione finisca
Ho bisogno di dare ai miei utenti Shiny la possibilità di scaricare un file di dati (essenzialmente interrogando un database). La query passa da una fase all'altra. Shiny supporta le date in modo nativo, ma non il tempo quindi devo dare agli utenti un campo di testo con un submitButton
Il problema è ho bisogno di avere il pulsante di invio fare un test di convalida su entrambi gli ingressi di testo, e l'uno: 1) Restituisce un messaggio di errore se uno dei due input non è valido 2) Scarica i dati, mentre fornisci aggiornamenti sullo stato (i dati possono richiedere un'ora facilmente - Non voglio lasciare gli utenti sospesi).
Ho scoperto qualcosa chiamato renderPrint
che mi è sembrata una buona opzione, nel senso che pretende di stampare ciò che è stato stampato sulla console - quindi posso stampare un messaggio di errore o visualizzare la normale uscita della console dal processo di download dei dati. Ma poi mantiene l'output stampato fino a quando l'intero processo non viene completato.
Sto pensando che un'altra soluzione possibile sarebbe tornare a renderText e quindi eseguire il rendering del testo direttamente dalla funzione queryMagic
: durante il processo di download dei dati, è possibile aggiornare periodicamente output$text
con un nuovo testo. Ma non sono sicuro di come esattamente farlo.
ui.R:
shinyUI(fluidPage(
# Application title
titlePanel("Demo Market Report"),
fluidRow(
column(4,
h3("Extract Data"),
helpText("Enter a start and end date/time of data to download. Be aware it takes about 10 minutes to download one hour of data.", strong("Date/time should be entered in yyyy-mm-dd hh:mm:ss format.")),
textInput("fromDatetime", "From:", value = paste(with_tz(Sys.time(), "EST")-3600)),
textInput("toDatetime", "To:", value = paste(with_tz(Sys.time(), "EST"))),
submitButton("Download Data Extract")
),
column(4,
textOutput("text1")
)
)
))
server.R:
shinyServer(
function(input, output) {
logText <- reactive({
if (input$fromDatetime == "a") {
data = queryMagic(blah,blah,blah) #this just gets the data, function is already used in production, I'll feed the shiny input into it but that seems straightforward
return("victory")
}
else return("invalid")
})
output$text1 <- renderPrint({
paste(logText())
})
}
)
Grazie in anticipo per l'aiuto.
Grazie (ancora) per l'aiuto @ Mikael. Sono fuori per le vacanze per i prossimi 4 giorni, ma ci proverò lunedì e scriverò su come va. –
Ciao @ Mikael. Sembra che questo mantenga ancora tutti gli output di queryMagic() fino a quando queryMagic termina. Una volta che queryMagic termina, tutto l'output stampato viene fornito nell'interfaccia utente. 'queryMagic <- function() { stampa ("Warning1") Sys.sleep (3) stampa ("Attenzione2") Sys.sleep (3) stampa ("Attenzione3") ritorno ("Dati" } –
Le mie esigenze immediate sono risolte dalla barra di avanzamento di Lucido, ma la domanda principale non ha ancora risposta –