Я создаю приложение 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
был слишком большим и содержал ненужные прочее. Он должен только уметь предсказывать. Однако при удалении glm
summary()
больше не работает, поэтому я хотел бы также вернуть сводку.
Итак, вот моя проблема: если я загружу объект, все еще есть некоторые «скрытые» объекты делают файл слишком большим. В этом представлении это 16,2 МБ, тогда как если я загружаю соответствующий объект обратно в память, я обнаруживаю, что реальный размер объекта намного меньше
load("report.Rd")
object.size(glm_object) # 22 kB
object.size(glm_summary) # 2.5 MB
Что здесь происходит? В моделях, которые я использую, мои данные потенциально содержат миллионы строк, поэтому размер объекта составляет несколько ГБ, а загрузка занимает много времени.
ОБНОВЛЕНИЕ
Похоже, это связано с версией или базовыми настройками. В приведенных выше настройках, где я столкнулся с проблемой, я использую
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 из-за ограничений политики
ОБНОВЛЕНИЕ II
Кажется, проблема не связана с R
или shiny
и не воспроизводится на разных платформах