Р: Растровая мозаика из списка растров?
Я работаю с постом здесь: Как я могу создать растровую мозаику, используя список растров? создать растровую мозаику, используя список растров. Пример в ответе, данном fmark, работает отлично, но я получаю ошибку, когда выполняю шаги, используя мои собственные данные. Не уверен, где я иду не так, любая помощь будет очень цениться!
R version 2.15.3 (2013-03-01)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] raster_2.2-12 rgdal_0.8-10 sp_1.0-14
loaded via a namespace (and not attached):
[1] grid_2.15.3 lattice_0.20-15 tools_2.15.3
Я использовал функцию из Как перебрать список, сохраняя формат результатов? создать мой список растров.
ListRasters <- function(list_names) {
raster_list <- list() # initialise the list of rasters
for (i in 1:(length(list_names))){
grd_name <- list_names[i] # list_names contains all the names of the images in .grd format
raster_file <- raster(grd_name)
}
raster_list <- append(raster_list, raster_file) # update raster_list at each iteration
}
Затем я генерирую список имен и создаю из них свой список растров.
wgs84.tif.list <- list.files(path=mod.dir, pattern=glob2rx("*_wgs84.tif"), full.names=T,recursive=F)
list_names <- NULL
for (i in 1:length(wgs84.tif.list)) {
list_names <- c(list_names, wgs84.tif.list[i])
}
raster.list <-sapply(list_names, FUN = ListRasters)
raster.list$fun <- mean
mos <- do.call(mosaic, raster.list)
Это ошибка, которую я получаю:
Ошибка в функции (классы, fdef, mtable): не удалось найти унаследованный метод для функции "мозаика" для подписи "отсутствует", "отсутствует"'
Мой растровый список начинается примерно так (он содержит 11 растров):
$`/import/c/w/kbennett/MODSCAG/snow-dav.jpl.nasa.gov/modscag-historic/2002/091/MOD09GA.A2002091.h08v03.005.2007124035032snow_fraction_wgs84.tif`
class : RasterLayer
dimensions : 2400, 2400, 5760000 (nrow, ncol, ncell)
resolution : 463.3127, 463.3127 (x, y)
extent : -11119737, -10007786, 5559984, 6671935 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
data source : /import/c/w/kbennett/MODSCAG/snow-dav.jpl.nasa.gov/modscag-historic/2002/091/MOD09GA.A2002091.h08v03.005.2007124035032snow_fraction_wgs84.tif
names : MOD09GA.A2002091.h08v03.005.2007124035032snow_fraction_wgs84
values : 0, 255 (min, max)
4 ответа
Мои растры не были названы правильно. Чтобы исправить это, побежал, прежде чем вызывать на это веселье
names(rasters.list) <- NULL
Затем:
raster.list$fun <- mean
mos <- do.call(mosaic, raster.list)
Чтобы немного расширить ответ Фу. Вы можете использовать sapply для создания списка объектов RasterLayer.
rlist <- sapply(list_names)
Затем добавьте имена других аргументов. Первые из них - "х" и "у" (см. Мозаику). Однако это также будет работать, если они равны NULL (поскольку будет использоваться их позиция).
names(rlist)[1:2] <- c('x', 'y')
rlist$fun <- mean
rlist$na.rm <- TRUE
А теперь позвони do.call
x <- do.call(mosaic, rlist)
Как насчет этого? Я нуб в Р.
lista = список растров мозаика = функция (лист){ растр = лист [[1]] для (я в 2: длина (лист)){ растр1 = мозаика (растр, лист [[i]], веселье = макс) растр = растр1 } Возвращение (растр) }
Как упоминалось выше @Bappa Das, предоставленное решение не работает на земле. @moho wu не упомянул проблему. Остается неясным, как пройти
na.rm
к
terra::mosaic
. Если у кого-то есть рабочий ответ...