在一个列表中堆叠/连接栅格图层(terra - spatRaster)

4

我想使用terra将我在列表中拥有的多个栅格叠加起来。

以前,在raster中可以很容易地使用stack()函数对列表进行叠加。然而,在terra中这已不再适用。请参见下面的示例:

r1 <- raster(nrows = 1, ncols = 1, res = 0.5, xmn = -1.5, xmx = 1.5, ymn = -1.5, ymx = 1.5, vals = 0.1)
r2 <- raster(nrows = 1, ncols = 1, res = 0.5, xmn = -1.5, xmx = 1.5, ymn = -1.5, ymx = 1.5, vals = 0.2)
r_list <- list(r1, r2)
r_stack <- stack(r_list)

栅格堆栈中的结果:

class      : RasterStack 
dimensions : 6, 6, 36, 2  (nrow, ncol, ncell, nlayers)
resolution : 0.5, 0.5  (x, y)
extent     : -1.5, 1.5, -1.5, 1.5  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs 
names      : layer.1, layer.2 
min values :     0.1,     0.2 
max values :     0.1,     0.2 

但是在 terra 中,使用 c() 等价于在列表上直接使用它是行不通的:

r1 <- rast(nrows = 1, ncols = 1, resolution = 0.5, xmin = -1.5, xmax = 1.5, ymin = -1.5, ymax = 1.5, vals = 0.1)
r2 <- rast(nrows = 1, ncols = 1, resolution = 0.5, xmin = -1.5, xmax = 1.5, ymin = -1.5, ymax = 1.5, vals = 0.2)
r_list <- list(r1, r2)
r_c <- c(r_list)

错误信息如下:

Error in .local(x, ...) : Arguments should be Raster* objects or filenames

请问如何解决在列表中整理spatRaster的问题?

1
有一些打字错误。第二个r1应该是r2。使用r_c <- c(r1, r2)并删除r_list <- list(r1, r2)。在raster包中也不需要r_list <- list(r1, r2)。直接运行r_stack <- stack(r1, r2)即可。 - UseR10085
corrected - thanks! - Javier Fajardo
1个回答

6
您可以使用以下代码使用terra包将列表转换为堆栈光栅。
library(terra)

r1 <- rast(nrows = 1, ncols = 1, resolution = 0.5, xmin = -1.5, xmax = 1.5, ymin = -1.5, ymax = 1.5, vals = 0.1)
r2 <- rast(nrows = 1, ncols = 1, resolution = 0.5, xmin = -1.5, xmax = 1.5, ymin = -1.5, ymax = 1.5, vals = 0.2)
r_list <- list(r1, r2)
r_c <- rast(r_list) 

这将为您带来

class       : SpatRaster 
dimensions  : 6, 6, 2  (nrow, ncol, nlyr)
resolution  : 0.5, 0.5  (x, y)
extent      : -1.5, 1.5, -1.5, 1.5  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 
sources     : memory  
              memory  
names       : lyr.1, lyr.1 
min values  :   0.1,   0.2 
max values  :   0.1,   0.2 

或者您可以使用以下方法:

r1 <- rast(nrows = 1, ncols = 1, resolution = 0.5, xmin = -1.5, xmax = 1.5, ymin = -1.5, ymax = 1.5, vals = 0.1)
r2 <- rast(nrows = 1, ncols = 1, resolution = 0.5, xmin = -1.5, xmax = 1.5, ymin = -1.5, ymax = 1.5, vals = 0.2)

r_c <- c(r1, r2)

谢谢,那很简单明了。 - Javier Fajardo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接