Ich habe 2 Skripte, die genau das Gleiche tun.
Ein Skript erstellt jedoch 3 RData-Dateien mit einem Gewicht von 82,7 KB und das andere Skript erstellt 3 RData-Dateien mit einem Gewicht von 120 KB.
der erste ist ohne Parallele:
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)))
})
Der zweite ist mit parallel:
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)
Das zweite Skript erstellt Dateien, die 42% mehr wiegen.
Wie kann ich Dateien parallel speichern, ohne die Dateigröße automatisch zu erhöhen?
r lang lock file
und nach 5 Sekunden finden Sie das gewünschte Paket cran.r-project.org/web/packages/filelock/filelock.pdfAntworten:
Wie andere bereits erwähnt haben, gibt es möglicherweise eine kleine Menge an Informationen über die Umgebung, die in den Dateien oder ähnlichem gespeichert wird, die Sie wahrscheinlich nicht bemerken würden, außer dass die Dateien so klein sind.
Wenn Sie nur an der Dateigröße interessiert sind, speichern Sie die Modelle in einer einzigen Liste und speichern Sie diese dann in einer Datei.
ddply
kann nur einen data.frame als Ergebnis der Funktion verarbeiten, daher müssen wir ihndlply
stattdessen anweisen , die Ergebnisse in einer Liste zu speichern. Dadurch wurde nur eine Datei gespeichert, die 60 KB groß war.Hier ist ein Beispiel dafür, wovon ich spreche:
quelle
Ich habe ddply nicht zum Parallelisieren von Speicherobjekten verwendet, daher wird die Datei vermutlich viel größer, da sie beim Speichern von Modellobjekten auch einige Informationen über die Umgebung enthält, aus der sie gespeichert wird.
Wenn Sie also Ihren obigen ddply-Code verwenden, habe ich folgende Größen:
Es gibt zwei Möglichkeiten, eine ist die Verwendung von purrr / furrr:
Oder um saveRDS (und ddply?) Zu verwenden, da Sie nur ein Objekt zum Speichern haben:
Sie werden tun,
readRDS
anstattload
die Datei zu erhalten:Wir können die Koeffizienten im Vergleich zum rda-Objekt betrachten:
Die Objekte sind aufgrund der Umgebungsteile nicht identisch, aber in Bezug auf Vorhersage oder andere Dinge, für die wir sie normalerweise verwenden, funktioniert es:
quelle