You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用terra包堆叠/拼接列表中的SpatRaster栅格

terra包列表栅格堆叠拼接实现方案

报错原因

terra包中用于拼接多层栅格的c()方法,仅接受独立的SpatRaster对象或栅格文件路径作为入参,不支持直接传入存储SpatRaster的列表对象,因此直接运行c(r_list)会抛出参数类型错误。

实现方法

方法1:do.call传参(最推荐)

利用R基础函数do.call(),可以将列表中的元素自动拆解为独立参数传入目标函数,完全等效于raster包中stack()直接传列表的效果,代码如下:

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_stack <- do.call(c, r_list)

运行后得到的多层SpatRaster对象输出如下,和raster包生成的RasterStack结构完全对应:

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.2 
min values  :   0.1,   0.2 
max values  :   0.1,   0.2 

方法2:Reduce迭代拼接

如果偏好函数式编程写法,也可以用Reduce()将c()方法逐次应用在列表的所有栅格对象上,实现相同的拼接效果:

r_stack <- Reduce(c, r_list)

注意事项

  • 待拼接的所有栅格必须保持一致的坐标参考系、空间分辨率和空间范围,否则会触发拼接错误或自动触发不必要的重采样,该要求和raster包stack()函数完全一致。
  • 如果列表中同时包含SpatRaster对象和本地栅格文件路径字符串,上述两种方法都可以自动识别并读取路径对应的栅格完成拼接。

内容的提问来源于stack exchange,提问作者Javier Fajardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:06:18