从循环中的栅格堆栈中提取单个图层
Extracting individual layers from raster stack in loop
我有一个有 18 层的 RasterStack
。我需要将所有图层提取为单独的图层。但是我不想将这些文件写入磁盘(所以不使用 writeRaster
函数)。我只是想将它们提取到工作中 space。
当我使用 for
循环时,我得到一个单层(最后一个),并且没有其他层被保存到作品中space。
for(i in 1:nlayers(r)) {
X <- r[[i]]
}
我在这个循环中缺少什么?
您可以为此使用 unstack
和 list2env
:
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
。
我有一个有 18 层的 RasterStack
。我需要将所有图层提取为单独的图层。但是我不想将这些文件写入磁盘(所以不使用 writeRaster
函数)。我只是想将它们提取到工作中 space。
当我使用 for
循环时,我得到一个单层(最后一个),并且没有其他层被保存到作品中space。
for(i in 1:nlayers(r)) {
X <- r[[i]]
}
我在这个循环中缺少什么?
您可以为此使用 unstack
和 list2env
:
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
。