Это помогло мне в моем конкретном случае использования и выглядит немного безопаснее для меня ...

ложно, так как я не могу привести воспроизводимый пример, но я надеюсь, что у других, возможно, был опыт работы с этим.

По сути, у меня есть функция, которая извлекает большое количество данных из БД, очищает и уменьшает размер и перебирает некоторые параметры для создания серии объектов модели 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.

Это, однако, имеет некоторые большие недостатки.

Во-первых, это метод проб и ошибок, и он не следует четкому логическому порядку, с частыми сбоями и несколькими часами, затраченными на создание объекта списка, это очень долгий цикл отладки.

Во-вторых, это будет означать, что моя основная функция будет состоять из многих сотен строк, что сделает будущие изменения и отладку намного сложнее.

Мой вопрос к вам:

Кто-нибудь сталкивался с этой проблемой раньше?

Любые гипотезы относительно того, что это вызывает?

Кто-нибудь нашел логическое решение без проб и ошибок?

Спасибо за вашу помощь.

Ответы на вопрос(2)

Ваш ответ на вопрос