闪亮的下载处理程序不必要的大文件
Shiny downloadhandler unnecessary big file
我正在构建一个 shiny
应用程序,您可以在其中训练模型。一项功能是能够下载模型对象(在本例中为 glm
对象),以便用户稍后可以在应用程序之外使用它。我的代码的相关部分如下所示
library(shiny)
library(car)
ui <- fluidPage(
# What parameter do you wish to estimate
selectInput(inputId = "dependent_variable",
label = "Select dependent variable",
choices = c("education",
"vocabulary")),
# Download button for model
downloadButton(outputId = "download_model", label = 'Download Model')
)
server <- function(input, output){
strip_glm <- function(cm) {
cm$y <- c()
cm$model <- c()
cm$residuals <- c()
cm$fitted.values <- c()
cm$effects <- c()
cm$qr$qr <- c()
cm$linear.predictors <- c()
cm$weights <- c()
cm$prior.weights <- c()
cm$data <- c()
cm$family$variance <- c()
cm$family$dev.resids <- c()
cm$family$aic <- c()
cm$family$validmu <- c()
cm$family$simulate <- c()
attr(cm$terms,".Environment") <- c()
attr(cm$formula,".Environment") <- c()
return(cm)
}
reactive_glm_model <- reactive(glm(paste0(input$dependent_variable, "~."), data = Vocab))
stripped_glm <- reactive(strip_glm(reactive_glm_model()))
stripped_glm_summary <- reactive(summary(reactive_glm_model()))
output$download_model <- downloadHandler(
filename = function() {
"report.Rd"
},
content = function(file) {
glm_object <- stripped_glm()
glm_summary <- stripped_glm_summary()
save(glm_object, glm_summary, file = file)
}
)
}
shinyApp(ui, server)
我使用 strip_glm()
函数,因为我不希望 glm
对象成为 too big and carry unnecessary 东西。它应该只能预测。但是,通过剥离 glm
,summary()
不再起作用,因此我也想 return 总结。
所以这是我的问题:如果我下载对象,仍然有一些 'hidden' 对象使文件太大。在这个 reprex 中,它是 16.2 MB,而如果我将相应的对象加载回内存,我发现实际对象的大小要小得多
load("report.Rd")
object.size(glm_object) # 22 kB
object.size(glm_summary) # 2.5 MB
这是怎么回事?在我使用的模型中,我的数据可能有数百万行,导致对象有几个 GB,下载需要很长时间。
更新
好像跟版本或者底层设置有关。在上面的设置中,确实遇到了我使用的问题
platform x86_64-redhat-linux-gnu
arch x86_64
os linux-gnu
system x86_64, linux-gnu
status
major 3
minor 5.2
year 2018
month 12
day 20
svn rev 75870
language R
version.string R version 3.5.2 (2018-12-20)
nickname Eggshell Igloo
很遗憾,由于政策限制,我无法更新 R 的版本
更新二
问题似乎与 R
或 shiny
无关,并且在不同平台上无法重现
这里是同事。我们 运行 使用 RStudio Server 编写此代码,这似乎是导致问题的原因。 运行 带有 R 本身的 reprex(但仍在使用相同 R 可执行文件的同一台服务器上)绕过 RStudio,解决了这个问题,下载的 R 对象略超过 2 MB。
虽然不知道为什么使用 RStudio 会把事情搞砸。
使用的版本是RStudio Server (Pro) 1.2.5001-3
我正在构建一个 shiny
应用程序,您可以在其中训练模型。一项功能是能够下载模型对象(在本例中为 glm
对象),以便用户稍后可以在应用程序之外使用它。我的代码的相关部分如下所示
library(shiny)
library(car)
ui <- fluidPage(
# What parameter do you wish to estimate
selectInput(inputId = "dependent_variable",
label = "Select dependent variable",
choices = c("education",
"vocabulary")),
# Download button for model
downloadButton(outputId = "download_model", label = 'Download Model')
)
server <- function(input, output){
strip_glm <- function(cm) {
cm$y <- c()
cm$model <- c()
cm$residuals <- c()
cm$fitted.values <- c()
cm$effects <- c()
cm$qr$qr <- c()
cm$linear.predictors <- c()
cm$weights <- c()
cm$prior.weights <- c()
cm$data <- c()
cm$family$variance <- c()
cm$family$dev.resids <- c()
cm$family$aic <- c()
cm$family$validmu <- c()
cm$family$simulate <- c()
attr(cm$terms,".Environment") <- c()
attr(cm$formula,".Environment") <- c()
return(cm)
}
reactive_glm_model <- reactive(glm(paste0(input$dependent_variable, "~."), data = Vocab))
stripped_glm <- reactive(strip_glm(reactive_glm_model()))
stripped_glm_summary <- reactive(summary(reactive_glm_model()))
output$download_model <- downloadHandler(
filename = function() {
"report.Rd"
},
content = function(file) {
glm_object <- stripped_glm()
glm_summary <- stripped_glm_summary()
save(glm_object, glm_summary, file = file)
}
)
}
shinyApp(ui, server)
我使用 strip_glm()
函数,因为我不希望 glm
对象成为 too big and carry unnecessary 东西。它应该只能预测。但是,通过剥离 glm
,summary()
不再起作用,因此我也想 return 总结。
所以这是我的问题:如果我下载对象,仍然有一些 'hidden' 对象使文件太大。在这个 reprex 中,它是 16.2 MB,而如果我将相应的对象加载回内存,我发现实际对象的大小要小得多
load("report.Rd")
object.size(glm_object) # 22 kB
object.size(glm_summary) # 2.5 MB
这是怎么回事?在我使用的模型中,我的数据可能有数百万行,导致对象有几个 GB,下载需要很长时间。
更新
好像跟版本或者底层设置有关。在上面的设置中,确实遇到了我使用的问题
platform x86_64-redhat-linux-gnu
arch x86_64
os linux-gnu
system x86_64, linux-gnu
status
major 3
minor 5.2
year 2018
month 12
day 20
svn rev 75870
language R
version.string R version 3.5.2 (2018-12-20)
nickname Eggshell Igloo
很遗憾,由于政策限制,我无法更新 R 的版本
更新二
问题似乎与 R
或 shiny
无关,并且在不同平台上无法重现
这里是同事。我们 运行 使用 RStudio Server 编写此代码,这似乎是导致问题的原因。 运行 带有 R 本身的 reprex(但仍在使用相同 R 可执行文件的同一台服务器上)绕过 RStudio,解决了这个问题,下载的 R 对象略超过 2 MB。
虽然不知道为什么使用 RStudio 会把事情搞砸。 使用的版本是RStudio Server (Pro) 1.2.5001-3