2016-03-30 9 views
1

Ich versuche, eine glänzende App zu erstellen, mit der ich lineare Modelle anpassen, Informationen über sie anzeigen und speichern kann.Wie kann ich die Größe eines linearen Modells reduzieren, das von einer Shiny-App gespeichert wird?

Ich stehe vor einem Problem: Wenn ich ein Modell speichere, nimmt es einen riesigen Platz ein. Hier ist ein vereinfachter Code:

library(shiny) 
library(ggplot2) 

ui <- shinyUI(fluidPage(
    titlePanel("Save linear Model"), 

    sidebarLayout(
     sidebarPanel(
     actionButton("save","SAVE !") 
    ), 

     mainPanel(
     textOutput("saved") 
    ) 
    ) 
)) 


server <- shinyServer(function(input, output) { 

    load("donnees/new/V283/V283_complete.RData") 

    observeEvent(input$save,{ 

    lm.fit<-lm(price~.,data=diamonds) 
    save(lm.fit, file="question-x-validated/my-model.RData") 
    output$saved<-renderText("Saved") 

    }) 

}) 

shinyApp(ui = ui, server = server) 

In der Tat, desto mehr Objekte, die ich erstellen/Last in meiner app, desto größer mein gespeicherten Modell. Das Objekt, mit dem ich zB lade:

load("donnees/new/V283/V283_complete.RData") 

ist 275,1MB. Wenn ich meine lm.fit nach dem Laden speichern, ist meine rdata Datei 36.9Mb. Wenn ich meine lm.fit speichern, ohne sie zu laden, ist meine Datei 13 MB groß. Wenn ich spare mein lm.fit direkt von R (ohne meine glänzende app), die Datei 6,57Mb

Wie in this link vorgeschlagen, könnte es ein Problem sein Umfeld. Aber es scheint mir, dass die Tatsache, dass ich glänzend benutze, einige Schwierigkeiten hinzufügt, da keine der Techniken, die durch den obigen Link vorgeschlagen wurden, in meinem Fall funktionierte.

Ich habe auch versucht, mit der saveRDS-Funktion. Und auch ersetzt:

lm.fit<-lm(price~.,data=diamonds) 

von

assign("lm.fit",lm(price~.,data=diamonds),envir=globalenv()) 

Es ändert sich die Dateigröße, aber es wird nie so wenig wie 6.57Mb.

Wie in meinem echten Code, importiere ich wirklich große Datensätze, meine realen Modelle werden wirklich riesig (mehr als 500 MB), und es macht meine Shiny App wirklich langsam, wenn sie diese Modelle lädt/speichert.

Ich würde wirklich jede Hilfe schätzen, die Sie zur Verfügung stellen können.

EDIT:

Es ist mein Problem scheint von den "Begriffe" Element meines Modells kommt, als wenn ich es tue:

lm.fit<-lm.fit[1:11] 

vor meinem Modell speichern, meine Datei ist 5.92MB ! Aber wie Sie wissen, ist das Element "Terms" erforderlich, um predict() zu verwenden. Und nur machen:

attr(lm.fit$terms,".Environment") = c() 

funktioniert nicht.

Auch Komische:

lm.fit$terms<-NULL und lm.fit<-lm.fit[-12] nichts ändern, während lm.fit<-lm.fit[1:11] tut.

+0

Abstimmung für die Migration zu SO. Weitere Informationen zu softwarespezifischen Fragen finden Sie in der Hilfe. Im Wesentlichen ist CV nicht für Ratschläge oder Debug-Code. –

+0

Dies scheint eher ein Codierungsproblem als ein statistisches zu sein - werfen Sie einen Blick auf unsere [help/on-topic], um zu sehen, was in CrossValidated am Thema ist. Es scheint mir, dass Sie genügend Informationen bereitgestellt haben, um eine Antwort bei StackOverflow zu erhalten; Das wahrscheinlichste Ergebnis ist, dass dies dort migriert wird, sodass Sie es nicht selbst cross-posten müssen. – Silverfish

Antwort

1

Auschecken this great post für einige Methoden/Informationen über die Verringerung der Größe des Fettes auf Glm/lm Objekte.

I use this method, which I took from the above.

+0

Ich habe meinen Beitrag bearbeitet: mein Problem scheint von dem Element "terms" zu kommen, aber die Verwendung von 'attr (lm.fit $ terms,". Environment ") = c()' wie in deinem Post vorgeschlagen, funktioniert nicht. – mdebbiche

+0

Wird [dieser Code] (https://gist.github.com/DexGroves/0ab74856ecfc8e8abc66e3d792abb0f4) für Sie ausgeführt? Ich kann 'lm' und' glm' Objekte ohne Probleme schneiden. Die Zeile 'attr (lm.fit $ terms,". Environment ") = c()' wird erfolgreich ausgeführt. Was ist die 'object.size' vor und nach dem Ausführen von' strip_glm' für Ihr Modell? –

+0

Mea culpa, es funktioniert gut. So viel Platz gespart. Vielen Dank. – mdebbiche

Verwandte Themen