2015-07-22 23 views
5

Ho bisogno di distribuire una ShinyApp con Shiny Server. Per funzionare, la mia app ha bisogno di dati da un file .RData (~ 300 Mo). Questo file .RData viene caricato con un'istruzione load(...) che si trova in un file global.R. Funzione del computer, il caricamento può richiedere diversi minuti ciò che è scortese per l'utente.R: carica solo una volta .RData in una ShinyApp distribuita

Come è possibile fare in modo che il file .RDate venga caricato una sola volta in modo che ogni nuovo utente non debba ricaricare il file .RData?

Grazie.

risposta

2

Se si carica l'oggetto in global.R, solo una volta deve essere caricato. Ogni utente dopo il primo dovrebbe avere un accesso veloce alla propria applicazione.

Se stai sviluppando localmente la tua app, puoi testare quello che sto dicendo nel modo seguente. Inizia la tua applicazione con, per esempio,

runApp(port=5050) 

solo per impostare la porta. Hai bisogno di tempo per il tuo browser per visualizzare l'app. Dopo aver caricato, prendi nota dell'indirizzo della tua app (dovrebbe essere 127.0.0.1:5050), chiudi la scheda del browser dell'app (ma non fermarti!), Apri una nuova scheda e inserisci l'indirizzo sopra nella barra degli indirizzi. Ora, l'accesso alla tua app dovrebbe essere molto veloce.

Questo solo per dire che finché lucido è attivo e in esecuzione, i comandi in global.R vengono eseguiti all'inizio e la loro valutazione viene inserita nell'ambiente globale R. Non vengono eseguiti ogni volta che un utente si connette all'app.

Considerare anche che è possibile velocizzare il caricamento di un Rdata se lo si salva con l'argomento compress=FALSE. In questo modo, il tuo file sarà più grande, ma il caricamento sarà più veloce.

+0

Grande aiuto! Ho provato l'esperienza basata su 'runApp (port = 5050)' e ha funzionato molto bene! Potrebbe essere ovvio, ma 'session $ onSessionEnded (function() {stopApp()}) non deve essere nel' server.R' in modo che funzioni .... Grazie anche per 'compress = FALSE': molto utile. – JPL