1

我正在尝试在列表中的一些栅格上循环重采样函数,以便它们的尺寸、范围和分辨率与列表中的第一个栅格相匹配。但我不断收到以下错误

(function (classes, fdef, mtable) 中的错误:无法为签名 '"list"、"RasterLayer"' 的函数 'resample' 找到继承的方法</p>

下面是我的代码:

library(raster)
rastlist <- list.files(path = ".", pattern='.tif$',
all.files=T, full.names=F)
allrasters <- lapply(rastlist, raster)
nrasters <- length(allrasters)
raster_standard <- allrasters[[1]]
r<-allrasters[i]
for (i in 1:nrasters) {
rs<-resample(r,raster_standard, method='bilinear')
}

我发现了一些类似的线程,但我认为我没有犯同样的错误,所以我不确定解决方案是否会对我有所帮助。您可以提供的任何帮助将不胜感激。

4

1 回答 1

1

你有以下错误

  1. allrasters[i]在 for 循环之外使用
  2. 您需要使用双括号从列表中提取某些内容,如allrasters[[i]]--- 使用单括号会生成您报告的错误消息,因为您会尝试使用resamplealist而不是 aRasterLayer
  3. 在循环内部,您会覆盖相同的变量rs,因此您最好只进行最后一次迭代。相反,将栅格添加到列表中
  4. 您使用自身重新采样了第一个栅格。这没有,但没有任何意义

以下作品

library(raster)
#ff <- list.files(pattern='\\.tif$')
# to make this reproducible
f <- system.file("external/test.grd", package="raster")    
ff <- rep(f, 3)

rr <- lapply(ff, raster)

standard <- rr[[1]]

rs <- list(standard)
for (i in 2:length(rr)) {
    rs[[i]] <- resample(rr[[i]], standard, method='bilinear')
}

s <- stack(rs)

为了更快地重新采样,您可以尝试terra

library(terra)
rr <- lapply(ff, rast)
standard <- rr[[1]]

rs <- list(standard)
for (i in 2:length(rr)) {
    rs[[i]] <- resample(rr[[i]], standard, method='bilinear')
}

s <- rast(rs)
于 2021-04-10T03:20:38.583 回答