Mam 2 skrypty, które robią dokładnie to samo.
Ale jeden skrypt tworzy 3 pliki RData o wadze 82,7 KB, a drugi skrypt tworzy 3 pliki RData o wadze 120 KB.
pierwszy nie jest równoległy:
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)))
})
Drugi jest równoległy:
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)
drugi skrypt tworzy pliki ważące o 42% więcej.
Jak mogę zapisywać pliki równolegle bez automatycznego zwiększania rozmiaru pliku?
r lang lock file
a po 5 sekundach znajdziesz żądany pakiet cran.r-project.org/web/packages/filelock/filelock.pdfOdpowiedzi:
Jak wspomnieli inni, w plikach lub podobnych obiektach może znajdować się niewielka ilość informacji o środowisku, których prawdopodobnie nie zauważysz, z wyjątkiem tego, że pliki są tak małe.
Jeśli interesuje Cię tylko rozmiar pliku, spróbuj zapisać modele na jednej liście, a następnie zapisz je w jednym pliku.
ddply
możemy obsłużyć tylko data.frame w wyniku działania funkcji, więc musimy użyćdlply
zamiast tego, aby nakazać mu zapisanie wyników na liście. W ten sposób zapisano tylko jeden plik o rozmiarze 60 KB.Oto przykład tego, o czym mówię:
źródło
Nie używałem ddply do równoległego zapisywania obiektów, więc sądzę, że plik staje się znacznie większy, ponieważ kiedy zapisujesz obiekt modelu, przenosi on również pewne informacje o środowisku, z którego jest zapisywany.
Więc używając powyższego kodu ddply, rozmiary mam:
Istnieją dwie opcje, jedna z nich to purrr / furrr:
Lub użyć saveRDS (i ddply?), Ponieważ masz tylko jeden obiekt do zapisania:
Zrobisz
readRDS
zamiast,load
aby uzyskać plik:Możemy spojrzeć na współczynniki w porównaniu z obiektem rda:
Obiekty nie są identyczne z powodu części środowiska, ale pod względem przewidywania lub innych rzeczy, do których zwykle go używamy, działa:
źródło