Это помогло мне в моем конкретном случае использования и выглядит немного безопаснее для меня ...
ложно, так как я не могу привести воспроизводимый пример, но я надеюсь, что у других, возможно, был опыт работы с этим.
По сути, у меня есть функция, которая извлекает большое количество данных из БД, очищает и уменьшает размер и перебирает некоторые параметры для создания серии объектов модели lm, значений параметров и других опорных значений. Это скомпилировано в сложную структуру списка, которая составляет около 10 МБ.
Затем он должен быть сохранен в виде файла RDS на AWS s3, где он извлекается в производственной среде для построения прогнозов.
например
db.connection <- db.connection.object
build_model_list <- function(db.connection) {
clean_and_build_models <- function(db.connection, other.parameters) {
get_db_data <- function(db.connection, some.parameters) {# Retrieve db data} ## Externally defined
db.data <- get_db_data()
build_models <- function(db.data, some.parameters) ## Externally defined
clean_data <- function(db.data, some.parameters) {# Cleans and filters data based on parameters} ## Externally defined
clean.data <- clean_data()
lm_model <- function(clean.data) {# Builds lm model based on clean.data} ## Externally defined
lm.model <- lm_model()
return(list(lm.model, other.parameters))} ## Externally defined
looped.model.object <- llply(some.parameters, clean_and_build_models)
return(looped.model.object)}
model.list <- build_model_list()
saveRDS(model.list, "~/a_place/model_list.RDS")
Проблема, которую я получаю, заключается в том, что объект «model.list», размер которого составляет всего 10 МБ, будет увеличиваться до многих ГБ, когда я сохраняю локально как RDS или пытаюсь загрузить его в AWS s3.
Следует отметить, что хотя функция обрабатывает очень большие объемы данных (~ 5 миллионов строк), данные, используемые в выходных данных, не превышают нескольких сотен строк.
Читая ограниченную информацию об этом в Stack Exchange, я обнаружил, что перемещение некоторых внешних функций (как части пакета) в основную функцию (например, clean_data и lm_model) помогает уменьшить размер сохранения RDS.
Это, однако, имеет некоторые большие недостатки.
Во-первых, это метод проб и ошибок, и он не следует четкому логическому порядку, с частыми сбоями и несколькими часами, затраченными на создание объекта списка, это очень долгий цикл отладки.
Во-вторых, это будет означать, что моя основная функция будет состоять из многих сотен строк, что сделает будущие изменения и отладку намного сложнее.
Мой вопрос к вам:
Кто-нибудь сталкивался с этой проблемой раньше?
Любые гипотезы относительно того, что это вызывает?
Кто-нибудь нашел логическое решение без проб и ошибок?
Спасибо за вашу помощь.