Я пытаюсь разработать функцию R для параллельного выделения многоугольников с помощью команды foreach:
library(deldir); library(plyr); library(rgdal);
library(doParallel);library(foreach);
#Detecting the number of cores available
num_cores <- detectCores() - 1
clust <- makeCluster(num_cores, type = "PSOCK")
registerDoParallel(clust)
Shape <- readOGR(dsn = ".\\Data\\greatlakes_subbasins",
layer = "greatlakes_subbasins")
idpoly <- lapply(Shape@polygons , slot , "ID")
plot(Shape, axes=T, asp=1)
foreach(j = 1 : iter(idpoly)$length, .packages = c('deldir','plyr','rgdal')
) %dopar% {
#print(j)
coord <- Shape@polygons[[j]]@Polygons[[1]]@coords
coord <- coord[-1,]
points(coord,col="orange",pch=20, cex=2)
box()
}
stopCluster(clust)
Однако я получаю сообщение об ошибке:
Error in { : task 1 failed - "plot.new has not been called yet"
Я ушелиз-за схожих проблем, обсуждаемых на других форумах, и переполнения стека, и, похоже, это указывает на то, что это, вероятно, проблема с функцией plot (), вызываемой вне foreach, и points () выполняется без доступа к plot ().
Может кто-нибудь дать мне знать, если я иду в правильном направлении?Кроме того, если есть какие-либо предложения, чтобы обойти это.
Ссылка на шейп-файл