Tengo 2 scripts que hacen exactamente lo mismo.
Pero un script está produciendo 3 archivos RData que pesan 82.7 KB, y el otro script está creando 3 archivos RData que pesan 120 KB.
el primero es sin 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)))
})
El segundo es con 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)
El segundo script crea archivos que pesan un 42% más.
¿Cómo puedo guardar archivos en paralelo sin aumentar automáticamente el tamaño del archivo?
r lang lock file
y después de 5 segundos encontrará el paquete deseado cran.r-project.org/web/packages/filelock/filelock.pdfRespuestas:
Como otros mencionaron, puede haber una pequeña cantidad de información sobre el entorno que se está guardando en los archivos o similar que probablemente no notaría, excepto que los archivos son tan pequeños.
Si solo le interesa el tamaño del archivo, intente guardar los modelos en una sola lista y luego guárdelos en un archivo.
ddply
solo puede manejar un data.frame como resultado de la función, por lo que debemos usarlodlply
para indicarle que almacene los resultados en una lista. Hacer esto se guardó en un solo archivo que tenía 60k.Aquí hay un ejemplo de lo que estoy hablando:
fuente
No he usado ddply para paralelizar los objetos guardados, así que supongo que el archivo se hace mucho más grande porque cuando guarda el objeto modelo, también contiene información sobre el entorno desde el que se guarda.
Entonces, usando su código ddply anterior, los tamaños que tengo son:
Hay dos opciones, una es usar purrr / furrr:
O para usar saveRDS (y ddply?) Ya que solo tiene un objeto para guardar:
Lo harás en
readRDS
lugar deload
obtener el archivo:Podemos ver los coeficientes en comparación con el objeto rda:
Los objetos no son idénticos debido a las partes del entorno, pero en términos de predicción u otras cosas para las que normalmente los usamos, funciona:
fuente