如何减小 Shiny 应用程序保存的线性模型的大小?

How can I reduce the size of a linear model saved by a Shiny app?

我正在尝试创建一个闪亮的应用程序,它允许我拟合线性模型、显示有关它们的信息,然后保存它们。

我遇到了一个问题:当我保存一个模型时,它占用了很大的空间。这是一个简化的代码:

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)

事实上,我 create/load 在我的应用程序中的对象越多,我保存的模型就越大。例如,我加载的对象:

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

为 275.1MB。如果我在加载后保存 lm.fit,我的 rdata 文件是 36.9Mb。如果我保存我的 lm.fit 而不加载它,我的文件是 13Mb。 如果我直接从 R 中保存我的 lm.fit(不使用我闪亮的应用程序),该文件是 6,57Mb

this link 中所建议,这可能是环境问题。但在我看来,我使用 shiny 的事实增加了一些困难,因为上述 link 建议的技术 none 在我的案例中有效。

我也尝试过使用 saveRDS 函数。并且还替换了 :

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

来自

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

它改变了文件大小,但它永远不会小到 6.57Mb。

在我的真实代码中,我导入了非常大的数据集,我的真实模型变得非常庞大(超过 500Mb),当它 loads/saves 这些模型时,它让我的 Shiny App 非常慢。

如果您能提供任何帮助,我将不胜感激。

编辑:

看来我的问题出在模型的 "terms" 元素上,就好像我是这样的:

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

保存我的模型之前,我的文件是 5.92Mb!但是如您所知,使用 predict() 需要 "terms" 元素。并且只做 :

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

无效。

另外,有趣的是:

lm.fit$terms<-NULLlm.fit<-lm.fit[-12] 没有任何改变,而 lm.fit<-lm.fit[1:11]

查看 this great post 了解一些 methods/info 减少 glm/lm 物体上脂肪的大小。

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