R语言stack函数报错:无法创建RasterLayer对象求排查
问题:使用stack函数加载ASC格式栅格文件时抛出错误
执行的代码:
wc25 <- stack(list.files(path="./Rhaebo/Bio_PresWC1.4/", pattern = "asc", full.names = T))
运行时抛出的错误:
Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", : Cannot create a RasterLayer object from this file.
已加载的R包:
library(ecospat) library(sf) library(ggplot2) library(maptools) library(sp) library(raster) library(rgeos) library(dismo) library(ENMeval) library(rJava) library(SSDM) library(usdm) library(sdm) library(plyr) library(rgdal) library(MigClim) library(spatialEco) library(biomod2) library(devtools) library(ENMTools) library(RColorBrewer) library(terra) library(reshape2) library(ggplot2) library(ggstatsplot) library(rasterVis) library(sf)
错误成因分析
文件本身或路径问题
- 先执行
list.files(path="./Rhaebo/Bio_PresWC1.4/", pattern = "asc", full.names = T)查看匹配到的文件,确认是否存在非ASC格式的文件、空文件或损坏文件。有些文件名包含asc但实际不是栅格文件,会导致加载失败。 - 检查ASC文件的头信息是否完整规范,必须包含
ncols、nrows、xllcorner、yllcorner、cellsize、NODATA_value这些必要字段,缺少或格式错误都会让raster包无法识别。
- 先执行
包冲突问题
- 同时加载了
raster和terra包,两个包的stack函数存在命名冲突。当前环境中stack可能调用的是terra包的版本,而terra对ASC文件的处理逻辑与raster不同,导致报错。可以改用raster::stack()明确指定调用raster包的函数,或者临时卸载terra包测试。
- 同时加载了
文件权限问题
- 在Linux/macOS系统下,需确认R对目标文件夹和文件有读取权限,权限不足会导致无法读取文件内容,进而无法创建RasterLayer对象。
内容的提问来源于stack exchange,提问作者Cristhian Peralta
相关产品推荐
相关产品推荐

