dati:Quali sono le migliori pratiche per velocizzare l'esecuzione dell'applicazione lucida?
Ho un'applicazione dashboard lucido e il mio gruppo di dati è di circa 600 MB. Si gonfia di 100 MB al mese. I miei dati risiedono localmente in MySQL.
MenuItems:
Ho 6 - 7 MenuItems barra laterale sul mio cruscotto e ognuno di loro ha 10 - 12 diverse uscite - grafici e tabelle. Ciascuna di queste schede ha 3 - 6 ingressi come selectizeInput, slider, intervallo di date, ecc. Per filtrare i dati.
sottoinsiemi di dati:
Dal momento che non riesco a caricare tutti i dati nella memoria, per ogni voce di menu creo un sottoinsieme di dati in base all'intervallo di date, mantenendo l'intervallo di date a solo 2 - 3 giorni dalla data di sistema.
Ad esempio:
df1 <- reactive({df[df$date >- dateinput[1] & df$date <- dateinput[2], ]})
È possibile che ottiene i dati per la mia prima voce di menu e funzione del selectInput o di altri ingressi, sto ulteriore filtraggio dei dati. Ad esempio, se ho un selectInput per Gender (male and female)
poi ulteriormente sottoinsieme df1
a:
df2 <- reactive({
if(is.null(input$Gender)){
df1
} else if(input$Gender == "Male")
{df1[df1$Gender == "Male",]}
)}
Se ho più di 1 ingresso, sono sottoinsiemi di questi DF1 ulteriormente e trasmettere i valori di DF2. df2 diventa il set di dati reattivo per tutti i grafici e le tabelle in quel MenuItem.
Più il numero di menuItem I crea più sottoinsiemi per adattarsi ai filtri e all'analisi.
mi trovo di fronte due problemi:
- Su macchine più vecchie, l'applicazione non viene caricato. e
- Su macchine più recenti, i carichi app molto lentamente a volte 5 - 6 minuti
Dopo la prima serie di carico di dati, i grafici e tabelle ottiene resi più veloce sui cambiamenti reattivi.
Per contrastare ciò, ho provato a spostare tutti i parametri e le librerie comuni e ripetitivi su global.R.
Ho due domande:
1.Are Ci sono dei fattori di igiene di base che bisogna tenere a mente quando il data mining in R specialmente attraverso lucido (Mining in R è estremamente veloce).
2. Ho letto sull'elaborazione parallela, ma quasi sempre tutti gli esempi parlano della distribuzione di un singolo calcolo più pesante. Possiamo distribuire attraverso l'elaborazione parallela, inserendo i dati o distribuendo la preparazione di grafici/tabelle.
Si prega di notare, io sono un ricercatore e non un programmatore, ma ho imparato a utilizzare le applicazioni lucide e host sul cloud o localmente di recente.
La guida su questo sarà molto utile per molti utenti alle prime armi di R come me.
Domanda davvero interessante, penso che affronterò questo problema in pochi mesi con la mia dashboard. Stai inviando una richiesta al tuo database SQL tempo di evry o lo stai caricando in Rdata una volta che l'App è in esecuzione? Quindi usando 'df1 [df1 $ Gender ==" Male ",]' per subset i tuoi dati è molto lento, provi ad usare la funzione 'filter' dal pacchetto' dplyr' è molto più veloce quando hai un grande set di dati –
You è necessario capire se la lentezza è dovuta all'accesso al database o alle funzioni R. Ecco alcune idee che potrebbero aiutare http://stackoverflow.com/questions/21484115/code-profiling-for-shiny-app Quando dici che l'app non viene caricata su macchine precedenti, prova a capire se è dovuto a limiti di memoria o la versione del browser ecc. Shiny ha un uso pesante di Javascript che potrebbe non funzionare con i browser più vecchi. –
Un altro punto interessante relativo a questa domanda, che non conosco la risposta a me stesso: se si dispone di più valori reattivi, tutti contenenti grandi (sotto) set di dati, come df1 e df2 in questo esempio, sono quei frame di dati mantenuti in memoria sempre? Direi che lo sono. Se lo sono, potrebbe essere una buona pratica avere un singolo df <- reattivo ({...}) per restituire sempre il dataset 'corrente' su cui si sta lavorando. –