У меня есть 2 сценария, которые делают точно так же.
Но один сценарий создает 3 файла RData, который весит 82,7 КБ, а другой сценарий создает 3 файла RData, который весит 120 КБ.
первый без параллели:
library("plyr")
ddply(.data = iris,
.variables = "Species",
##.parallel=TRUE,##Without parallel
.fun = function(SpeciesData){
#Create Simple Model -------------------------------------------------------------
Model <- lm(formula = "Sepal.Length~Sepal.Width+Petal.Length+Petal.Width",data = SpeciesData)
#Save The Model -------------------------------------------------------------
save(Model,
compress = FALSE,
file = gsub(x = "Species.RData",
pattern = "Species",
replacement = unique(SpeciesData$Species)))
})
Вторая с параллельной:
library("plyr")
doSNOW::registerDoSNOW(cl<-snow::makeCluster(3))
ddply(.data = iris,
.variables = "Species",
.parallel=TRUE,##With parallel
.fun = function(SpeciesData){
#Create Simple Model -------------------------------------------------------------
Model <- lm(formula = "Sepal.Length~Sepal.Width+Petal.Length+Petal.Width",data = SpeciesData)
#Save The Model -------------------------------------------------------------
save(Model,
compress = FALSE,
file = gsub(x = "Species.RData",
pattern = "Species",
replacement = unique(SpeciesData$Species)))
})
snow::stopCluster(cl)
второй скрипт создает файлы, которые весят на 42% больше.
Как сохранить файлы параллельно без автоматического увеличения размера файла?
r lang lock file
и через 5 секунд вы найдете нужный пакет cran.r-project.org/web/packages/filelock/filelock.pdfОтветы:
Как уже упоминалось, может быть небольшое количество информации об окружающей среде, которая сохраняется в файлах или аналогичной, которую вы, вероятно, не заметите, за исключением того, что файлы настолько малы.
Если вас интересует только размер файла, попробуйте сохранить модели в одном списке, а затем сохранить его в одном файле.
ddply
может обрабатывать только data.frame в результате выполнения функции, поэтому мы должныdlply
вместо этого использовать его, чтобы сообщить о необходимости сохранения результатов в списке. При этом сохраняется только один файл, который был 60 КБ.Вот пример того, о чем я говорю:
источник
Я не использовал ddply для распараллеливания сохраняемых объектов, поэтому я предполагаю, что файл становится намного больше, потому что когда вы сохраняете объект модели, он также несет некоторую информацию о среде, из которой он был сохранен.
Таким образом, используя приведенный выше код ddply, я имею следующие размеры:
Есть два варианта, один из них - использовать purrr / furrr:
Или использовать saveRDS (и ddply?), Поскольку у вас есть только один объект для сохранения:
Вы сделаете
readRDS
вместо того,load
чтобы получить файл:Мы можем посмотреть на коэффициенты в сравнении с объектом rda:
Объекты не идентичны из-за частей среды, но с точки зрения предсказания или других вещей, для которых мы обычно используем это, это работает:
источник