从循环中的栅格堆栈中提取单个图层

时间:2016-02-17 13:11:35

标签: r for-loop stack raster

我有一个RasterStack,有18层。我需要将所有图层提取为单独的图层。但我不想将这些文件写入磁盘(因此不使用writeRaster函数)。我只想将它们提取到工作空间。 当我使用for循环时,我得到一个单独的图层(最后一个),并且没有其他图层保存到工作区。

for(i in 1:nlayers(r)) {
  X <- r[[i]]
}

我在这个循环中缺少什么?

1 个答案:

答案 0 :(得分:1)

您可以使用unstacklist2env

library(raster)
s <- stack(replicate(5, raster(matrix(runif(100), 10))))

s
## class       : RasterStack 
## dimensions  : 10, 10, 100, 5  (nrow, ncol, ncell, nlayers)
## resolution  : 0.1, 0.1  (x, y)
## extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
## coord. ref. : NA 
## names       :     layer.1,     layer.2,     layer.3,     layer.4,     layer.5 
## min values  : 0.011998514, 0.003202582, 0.020602761, 0.023202067, 0.000311564 
## max values  :   0.9814509,   0.9963595,   0.9931403,   0.9766521,   0.9977042

ls()
## [1] "s"

list2env(setNames(unstack(s), names(s)), .GlobalEnv)
ls()
## [1] "layer.1" "layer.2" "layer.3" "layer.4" "layer.5" "s"   

我们unstack RasterStack到单个栅格图层列表,将图层名称指定为列表元素名称,然后在指定环境中将每个元素分配给具有相应名称的对象(全球环境,上面)。

请注意,如果环境中的对象名称与列表元素的名称冲突,则会覆盖它们。

有关详细信息,请参阅?list2env