J'ai 2 scripts qui font exactement la même chose.
Mais un script produit 3 fichiers RData qui pèsent 82,7 Ko, et l'autre script crée 3 fichiers RData qui pèse 120 Ko.
le premier est sans parallèle:
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)))
})
La seconde est à parallèle:
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)
le deuxième script crée des fichiers qui pèsent 42% de plus.
Comment puis-je enregistrer des fichiers en parallèle sans augmenter automatiquement la taille du fichier?
r lang lock file
et après 5 secondes, vous trouverez le package souhaité cran.r-project.org/web/packages/filelock/filelock.pdfRéponses:
Comme d'autres l'ont mentionné, il peut y avoir une petite quantité d'informations sur l'environnement qui est enregistrée dans les fichiers ou similaire que vous ne remarquerez probablement pas, sauf que les fichiers sont si petits.
Si la taille du fichier vous intéresse uniquement, essayez d'enregistrer les modèles dans une seule liste, puis enregistrez-la dans un fichier.
ddply
ne peut gérer un data.frame qu'à la suite de la fonction, nous devons donc utiliser à ladlply
place pour lui dire de stocker les résultats dans une liste. Cette opération a enregistré dans un seul fichier qui était 60k.Voici un exemple de ce dont je parle:
la source
Je n'ai pas utilisé ddply pour paralléliser la sauvegarde d'objets, donc je suppose que le fichier devient beaucoup plus volumineux car lorsque vous enregistrez un objet modèle, il contient également des informations sur l'environnement à partir duquel il est enregistré.
Donc, en utilisant votre code ddply ci-dessus, les tailles que j'ai sont les suivantes:
Il existe deux options, l'une consiste à utiliser purrr / furrr:
Ou d'utiliser saveRDS (et ddply?) Car vous n'avez qu'un seul objet à enregistrer:
Vous ferez
readRDS
au lieu deload
récupérer le fichier:On peut regarder les coefficients en comparaison avec l'objet rda:
Les objets ne sont pas identiques à cause des parties de l'environnement, mais en termes de prédiction ou d'autres choses pour lesquelles nous l'utilisons normalement, cela fonctionne:
la source