Я изучаю параллельную обработку как способ обработки огромных наборов данных.
У меня есть некоторые предопределенные переменные, как показано ниже:
CV <- function(mean, sd) {(sd / mean) * 100}
distThreshold <- 5 # Distance threshold
CVThreshold <- 20 # CV threshold
LocalCV <- list()
Num.CV <- list()
Затем загрузите библиотеку parallel
, распределите базовую переменную и библиотеку по кластерам:
library(parallel)
clust_cores <- makeCluster(detectCores(logical = T) )
clusterExport(clust_cores, c("i","YieldData2rd","CV", "distThreshold", "CVThreshold"))
clusterEvalQ(clust_cores, library(sp))
Затем передайте аргумент кластера clust_cores
в parSapply
:
for (i in seq(YieldData2rd)) {
LocalCV[[i]] = parSapply(clust_cores, X = 1:length(YieldData2rd[[i]]),
FUN = function(pt) {
d = spDistsN1(YieldData2rd[[i]], YieldData2rd[[i]][pt,])
ret = CV(mean = mean(YieldData2rd[[i]][d < distThreshold, ]$yield),
sd = sd(YieldData2rd[[i]][d < distThreshold, ]$yield))
return(ret)
}) # calculate CV in the local neighbour
}
stopCluster(clust_cores)
Затем я получаю Error in checkForRemoteErrors(val) : 6 nodes produced errors; first error: subscript out of bounds
в дополнение к warning messages:
1: closing unused connection (<-localhost:11688)
.
Пожалуйста, дайте мне знать, как решить эту проблему.
Для воспроизводимого примера я создаю большой объект списка, который отлично работает в исходном цикле for
без компонентов параллельной обработки.
library('rgdal')
Yield1 <- data.frame(yield=rnorm(460, mean = 10), x1=rnorm(460, mean = 1843235), x2=rnorm(460,mean = 5802532))
Yield2 <- data.frame(yield=rnorm(408, mean = 10), x1=rnorm(408, mean = 1843235), x2=rnorm(408, mean = 5802532))
Yield3 <- data.frame(yield=rnorm(369, mean = 10), x1=rnorm(369, mean = 1843235), x2=rnorm(369, mean = 5802532))
coordinates(Yield1) <- c('x1', 'x2')
coordinates(Yield2) <- c('x1', 'x2')
coordinates(Yield3) <- c('x1', 'x2')
YieldData2rd <- list(Yield1, Yield2, Yield3)
YieldData2rd
? без него код не запускается. Кроме того, вы экспортируетеi
в кластер перед его определением. - person Omry Atia   schedule 20.09.2018for
. Я экспортируюi
в кластер, потому что в противном случае мне не удается найти объектi
. - person Golden Jiang   schedule 21.09.2018foreach
, которая является параллельной версией цикла for. Надеюсь это поможет - person Omry Atia   schedule 21.09.2018foreach
и опубликовать ответ ниже, который, похоже, отлично работает на моей стороне. Только один вопрос, откуда я знаю, что это на самом деле быстрее, чем циклfor
? - person Golden Jiang   schedule 21.09.2018