如何提取Raster对象Model4的前90层生成NewModel4?
解决Raster对象提取前N个图层的问题
首先,咱们先梳理下你之前尝试方法的问题所在,然后给出可行的解决方案:
你之前方法的错误原因
- 方法1:
dplyr::between是为数据框设计的函数,而Model4是S4类型的Raster对象,两者不兼容,所以会抛出类型不匹配的错误。 - 方法2:
Model4$onedaymax是错误的访问方式——onedaymax是这个Raster对象的title属性,不是图层名称;你的图层名称是X1到X95,所以用%in% (0:89)自然会提示无效图层名。 - 方法3:Raster对象的索引规则是
[行索引, 列索引, 图层索引],你只写了Model4[0:89,],这其实是提取了前89行、所有列、所有95个图层,计算一下:89行 × 64列 ×95层 = 8550,所以结果长度不对,完全偏离了提取前90个图层的需求。
正确的解决方案
针对Raster对象(RasterStack/RasterBrick)提取指定图层,有几种简单可靠的方法:
方法1:使用subset()函数(推荐)
subset()是专门为Raster对象设计的图层选择函数,语法直观:
NewModel4 <- subset(Model4, 1:90)
这里的1:90就是你要保留的图层索引,直接对应前90个图层。
方法2:正确使用三维索引
按照Raster的索引规则,明确指定第三个维度(图层):
NewModel4 <- Model4[,,1:90]
这样就会提取所有行、所有列、前90个图层,完全符合你的需求。
方法3:移除不需要的图层
如果你更习惯删除多余图层,可以用dropLayer()去掉后5个图层:
NewModel4 <- dropLayer(Model4, 91:95)
验证结果
执行完上述任意一种方法后,你可以用nlayers(NewModel4)查看新对象的图层数量,应该返回90,就说明成功了。
内容的提问来源于stack exchange,提问作者Android17
相关产品推荐
相关产品推荐

