R语言用lapply裁剪RasterLayer列表时报找不到对象x错误如何解决
报错原因
lapply的FUN参数使用逻辑错误:你写的FUN = crop(x, y)会让R在执行lapply前就直接运行crop(x, y)表达式,此时环境中不存在名为x的变量,直接触发找不到对象的报错。lapply的FUN参数要求传入函数本身,而非函数的执行结果。- 次要注意点:旧版本
raster包的crop方法不直接支持sf类的矢量对象,需要先转为Spatial多边形格式,新版本已适配sf类可直接使用。 - 额外优化提示:不建议将
crop作为变量名,会和raster包的crop函数重名,后续易出现调用冲突。
正确实现代码
方法1:匿名函数写法(可读性最高)
library(raster) library(sf) # 直接遍历每个栅格执行裁剪,aoi作为固定裁剪范围 raster_crop_list <- lapply(myrasterList, function(r) { crop(r, aoi) })
如果运行后提示不识别sf类的aoi,可先将aoi转成Spatial格式再运行:
# sf转Spatial多边形适配旧版本raster包 aoi_sp <- as(aoi, "Spatial") raster_crop_list <- lapply(myrasterList, function(r) crop(r, aoi_sp))
方法2:通过lapply额外参数传入固定值(写法更简洁)
lapply支持在FUN后传入函数的固定参数,无需额外写匿名函数:
raster_crop_list <- lapply(X = myrasterList, FUN = crop, y = aoi)
内容的提问来源于stack exchange,提问作者Natalia Quintero
相关产品推荐
相关产品推荐

