Eu tenho 2 scripts que fazem exatamente o mesmo.
Mas um script está produzindo 3 arquivos RData com peso de 82,7 KB e o outro script criando 3 arquivos RData com peso de 120 KB.
o primeiro é sem paralelo:
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)))
})
O segundo é com paralelo:
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)
o segundo script cria arquivos que pesam 42% mais.
Como posso salvar arquivos em paralelo sem aumentar automaticamente o tamanho do arquivo?
r lang lock file
e, após 5 segundos, você encontrará o pacote desejado cran.r-project.org/web/packages/filelock/filelock.pdfRespostas:
Como outros mencionados, pode haver uma pequena quantidade de informações sobre o ambiente que está sendo salva nos arquivos ou similar que você provavelmente não notaria, exceto que os arquivos são muito pequenos.
Se você está interessado apenas no tamanho do arquivo, tente salvar os modelos em uma única lista e salve-os em um arquivo.
ddply
só pode manipular um data.frame como resultado da função, portanto, temos que usádlply
-lo para que ele armazene os resultados em uma lista. Isso foi salvo em apenas um arquivo com 60k.Aqui está um exemplo do que estou falando:
fonte
Eu não usei o ddply para paralelizar objetos salvos, portanto, acho que o arquivo fica muito maior porque, quando você salva o objeto de modelo, ele também carrega algumas informações sobre o ambiente em que é salvo.
Então, usando o código ddply acima, os tamanhos que tenho são:
Existem duas opções, uma é usar o purrr / furrr:
Ou use saveRDS (e ddply?), Pois você só tem um objeto para salvar:
Você fará em
readRDS
vez deload
obter o arquivo:Podemos observar os coeficientes em comparação com o objeto rda:
Os objetos não são idênticos por causa das partes do ambiente, mas em termos de previsão ou outras coisas para as quais normalmente o usamos, ele funciona:
fonte