Создание не распечатки списка для каждого - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу сделать это:

for(i in 1:length(dlist)){
  rlist[[i]] <- rasterize(u[,c("Lon","Lat")], r, dlist[[i]], fun=mean)
}

Поскольку мне придется делать это для нескольких файлов (длина списка составляет около 300), я хочу выполнить рутину для каждых 4 файлов параллельно, поэтому я попробовал это (просто чтобы получить первые четыре).

cl=makeCluster(detectCores() - 2)
registerDoParallel(cl)
rlist = list()
foreach(i= 1:1, .packages="raster",.export=('rlist'),.combine= 'c') %dopar% {

 rlist[[i]] <- rasterize(u[,c("Lon","Lat")], r, dlist[[i]], fun=mean)
}

Однако, это печатает список в консоли, и не присваивает каждый растеризацию i-му элементу списка, есть идеи почему? Спасибо!

1 Ответ

0 голосов
/ 09 ноября 2018

Я думаю, что вы хотите

x <- foreach(i= 1:4, .packages="raster", .combine=stack) %dopar% {
    rasterize(u[,c("Lon","Lat")], r, dlist[[i]], fun=mean)
}

Простой пример

library(raster)
library(foreach)
r <- raster(nrow=10, ncol=10, vals=1)
x <- foreach(i= 1:4, .packages="raster", .combine=stack) %do% { r + i }

s <- stack(x)
s 
#class       : RasterStack 
#dimensions  : 10, 10, 100, 4  (nrow, ncol, ncell, nlayers)
#resolution  : 36, 18  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#names       : layer.1, layer.2, layer.3, layer.4 
#min values  :       2,       3,       4,       5 
#max values  :       2,       3,       4,       5 

Или в один шаг

x <- foreach(i= 1:4, .packages="raster", .combine=stack) %do% { r + i }

Но я думаю, что самый простой и эффективный подходможет быть растеризация всех переменных за один шаг

 d <- as.matrix(as.data.frame(dlist)) 
 s <- rasterize(u[,c("Lon","Lat")], r, d, fun=mean)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...