Jestem nowy w korzystaniu z równoległych pakietów i zaczęłam je badać, aby przyspieszyć część mojej pracy. Często spotykam się z irytacją, że polecenie foreach
wywoła problemy, gdy nie mam odpowiednich funkcji/zmiennych.Wiedzieć, jakie obiekty klastraExport wcześniej
Przykład
Wiem, że przykład poniżej niekoniecznie musi foreach
zrobić to szybko, ale ze względu na ilustracji, będę go używać.
library(doParallel)
library(parallel)
library(lubridate)
library(foreach)
cl <- makeCluster(c("localhost", "localhost", "localhost","localhost"), type = "SOCK")
registerDoParallel(cl, cores = 4)
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 500, replace = TRUE)
foreach(i = seq_along(Dates), .combine = rbind) %dopar% dmy(Dates[i])
Error in dmy(Dates[i]) : task 1 failed - "could not find function "dmy""
Jak widać, nie jest to błąd, który mówi, że funkcja dmy
nie znaleziono. Potem trzeba iść dalej i dodać następujące:
clusterExport(cl, c("dmy"))
Więc moje pytanie jest, oprócz patrząc na błąd wskazówek dotyczących tego, co na eksport, to jest bardziej eleganckim sposobem wiedząc wcześniej, co sprzeciwia się wyeksportować lub jest istnieje sposób na udostępnienie globalnego środowiska wszystkim niewolnikom przed uruchomieniem foreach
?
Istnieje argument ".packages" dla tego. –
Czy mógłbyś opracować? Próbowałem (.packages()) i wymieniono załączone pakiety. Ale jak wyeksportować wszystkie obiekty paczki? Próbowałem clusterExport (cl, c ("library (lubridate)") i clusterExport (cl, c ("lubridate")) bezskutecznie. – JackeJR
Przepraszam, miałem na myśli argument ".packages' do' foreach', a nie '. funkcja .packages'. –