我正在尝试使用引用列表的循环加载144个栅格(.tif),但遇到错误。请注意,我的目录中仅包含这144个.tif文件,并且每个文件名的某些部分都是唯一的。我不确定如何最好地为此创建一个最小的可复制示例,因此我已经缩写了目录和文件名。
首先,我加载了“光栅”包并设置了工作目录, 然后我还要设置一个等于工作目录的变量“路径”。 接下来,我在目录中创建了文件列表
setwd("T:/sample/geotiffs")
path<-"T:/sample/geotiffs"
rastlist <- list.files(path=path, pattern='tif$', full.names=TRUE)
我尝试使用上一篇文章File not found in R raster loop
中的语法编写代码for (jj in 1:length(mget(rastlist))) {
x[jj] <- raster(paste0(rastlist[jj]))
}
但是,我遇到以下有关丢失第一个文件的错误: “错误:找不到'T:/sample/geotiffs/geotiff1.tif'的值”
我还尝试了在没有mget()和paste0()的情况下以这种方式进行编码,
x<-vector(mode="logical",length=144)
for(i in 1:length(rastlist)) {
x[i]<-raster(rastlist[i])
}
但是,我收到50多个警告“ 1:在x [i]中<-raster(rastlist [i]): 要替换的项目数不是替换长度的倍数”
有什么想法吗?运行此代码后,向量x似乎是带有144个随机整数的向量,我不确定为什么-也许我需要一种更好的方法来启动长度等于我的栅格列表的空白向量'x'?
答案 0 :(得分:3)
这应该有效:
library(raster)
f <- list.files(path=path, pattern='tif$', full.names=TRUE)
r <- lapply(f, raster)
如果栅格具有相同的范围和分辨率,则可能需要这样做
s <- stack(f)
答案 1 :(得分:0)
您尝试过吗:
x <- purrr:map(rastlist, raster)