如何减小 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<-NULL
和 lm.fit<-lm.fit[-12]
没有任何改变,而 lm.fit<-lm.fit[1:11]
查看 this great post 了解一些 methods/info 减少 glm/lm 物体上脂肪的大小。
我正在尝试创建一个闪亮的应用程序,它允许我拟合线性模型、显示有关它们的信息,然后保存它们。
我遇到了一个问题:当我保存一个模型时,它占用了很大的空间。这是一个简化的代码:
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<-NULL
和 lm.fit<-lm.fit[-12]
没有任何改变,而 lm.fit<-lm.fit[1:11]
查看 this great post 了解一些 methods/info 减少 glm/lm 物体上脂肪的大小。