我想这样做:
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个元素,为什么有什么主意?谢谢!
答案 0 :(得分:0)
我想你想要
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)