12 votos

Cómo mosaico rásteres en R?

Estoy tratando de mosaico de varios rásteres en una sola gran trama en R. Utilizando una secuencia de comandos que se registra en http://stackoverflow.com/questions/15287807/how-can-i-create-raster-mosaic-using-list-of-rasters Pero, he recibido un mensaje de advertencia y mensajes de error.

rasters1 <- list.files("F:\\MOD15A2_LAI_1km\\MOD15A2_LAI_2009", 
                      pattern = "mod15a2.a2009001.*.005.*.img$", 
                      full.names = TRUE, recursive = TRUE)

mos1 <-mosaic(rasters1, fun=mean)

Fue informes de error como el siguiente

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘extent' for signature ‘"character"'

Luego probé con otra versión.

rasters1.mosaicargs <- rasters1
rasters1.mosaicargs$fun <- mean

Pero aquí algunas mensaje de advertencia como el siguiente

Warning message:
In rasters1.mosaicargs$fun <- mean : Coercing LHS to a list

He ignorado el mensaje y luego continuó

mos2 <- do.call(mosaic, rasters1.mosaicargs)

pero aquí mismo error mencionado en un anterior

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘mosaic' for signature ‘"character", "character"'

Si hay alguna solución, yo sería muy apreciada. Gracias

19voto

Dan Puntos 16

El problema aquí es que el mosaico y hacer.la llamada está esperando un objeto raster en la lista y no sólo los nombres de los personajes de la trama que está contenido en el "rasters1" vector. Son, en efecto, pidiendo el mosaico de un nombre en un vector y no un objeto raster.

# Create some example data
require(raster)
    r <- raster(ncol=100, nrow=100)
      r1 <- crop(r, extent(-10, 11, -10, 11))
        r1[] <- 1:ncell(r1)
          r2 <- crop(r, extent(0, 20, 0, 20))
          r2[] <- 1:ncell(r2)
      r3 <- crop(r, extent(9, 30, 9, 30))
    r3[] <- 1:ncell(r3)

# If I create a list object of the raster names, as your are doing with list.files, 
#    do.call will fail with a character signature error 
rast.list <- list("r1","r2","r3")   
  rast.list$fun <- mean     
    rast.mosaic <- do.call(mosaic,rast.list)

# However, if I create a list contaning raster objects, the do.call function 
#   will work when mosaic is passed to it.      
rast.list <- list(r1, r2, r3)     
  rast.list$fun <- mean
    rast.mosaic <- do.call(mosaic,rast.list)
      plot(rast.mosaic)

# You could specify a for loop to create a list object, 
#   contaning raster objects
rasters1 <- list.files("F:/MOD15A2_LAI_1km/MOD15A2_LAI_2009", 
                       pattern="mod15a2.a2009001.*.005.*.img$", 
                       full.names=TRUE, recursive=TRUE)
rast.list <- list()
  for(i in 1:length(rasters1)) { rast.list[i] <- raster(rasters1[i]) }

# And then use do.call on the list of raster objects
rast.list$fun <- mean
  rast.mosaic <- do.call(mosaic,rast.list)
    plot(rast.mosaic)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X