Р: Растровая мозаика из списка растров?

Я работаю с постом здесь: Как я могу создать растровую мозаику, используя список растров? создать растровую мозаику, используя список растров. Пример в ответе, данном 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. Если у кого-то есть рабочий ответ...

Другие вопросы по тегам