创建不打印每个列表

时间:2018-11-08 22:35:55

标签: r foreach

我想这样做:

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 :(得分: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)