我在一个文件夹中有 37 个用于年度 PRISM 气候数据的栅格,但除了一次手动加载一个栅格之外,还没有找到一种更简单的方法将栅格加载到 R 中。
我尝试使用这个 for 循环来加载栅格并将它们组合成一个数据框:
创建堆栈
mystack <- pd_stack(prism_archive_subset("ppt","annual", years = 1982:2019))
为循环创建数据框以将所有栅格堆叠在一起。
filenames <- list.files(path = "./ppt rasters", pattern= '.bil', all.files=TRUE)
filenames
ncols <- dim(precip1982)[1]
nrows <- dim(precip1982)[2]
rasters <- stack(list(filenames))
初始化大对象
final.df <- as.data.frame(matrix(NA,nrow = nrows, ncol = ncols))
counter=1
for 遍历所有文件
for (file in filenames){
r <- raster(filenames)
test <- as.data.frame(r, na.rm=TRUE, row.names=TRUE, col.names=FALSE)
names(test)<- c(substring(file, 24, 29))
final.df <- cbind(z, test)
}
final.df[counter-1:nrow(final.df),]<-NULL
我收到错误说 .local(.object...) : 有其他错误。
有没有更好的方法来设置循环以使其运行?谢谢!
答案 0 :(得分:0)
prism::pd_stack()
返回一个 raster::RasterStack
对象,因此您需要在每一层上使用 raster 的 as.data.frame()
方法。
您可能想先裁剪/修剪数据。在我对仅 2 年的棱镜数据的测试中,从 RasterStack 创建一个 1.3GB 的数据帧需要大约 3 分钟。
library(prism)
# get 2 years of precip data as example
get_prism_annual("ppt", 2018:2019)
# get all the precip data from the prism archive as a RasterStack
# note that prism_archive_subset() will only return the 2018 and 2019 data
# if that is all that exists
mystack <- pd_stack(prism_archive_subset("ppt","annual", years = 1982:2019))
# now convert to data frame (each layer in the RasterStack is a Raster)
df <- lapply(mystack, as.data.frame)