Передискретизация нескольких растров с помощью цикла for
Я пытаюсь зациклить функцию передискретизации некоторых растров, которые у меня есть в списке, чтобы их размеры, экстент и разрешение соответствовали первому растру в списке. Но я продолжаю получать следующую ошибку
Ошибка в (function (classes, fdef, mtable): невозможно найти унаследованный метод для функции 'resample' для сигнатуры '"list", "RasterLayer"'
Ниже мой код:
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')
}
Я нашел несколько похожих тем, но не думаю, что делаю те же ошибки, поэтому не уверен, что решения помогут мне. Любая помощь, которую вы можете предоставить, будет высоко оценена.
1 ответ
У вас были следующие ошибки
- Вы использовали
allrasters[i]
вне цикла - вам нужно использовать двойные скобки для извлечения чего-либо из списка, как в
allrasters[[i]]
--- при использовании одинарных скобок будет сгенерировано сообщение об ошибке, о котором вы сообщаете, как если бы вы пытались использоватьresample
сlist
вместоRasterLayer
- Внутри цикла вы перезаписываете ту же переменную
rs
так что вы можете сделать только последнюю итерацию. Вместо этого добавьте растры в список - Вы передискретизируете первый растр с самим собой. Это не так , но в этом нет смысла
Ниже работает
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)