R:栅格列表中的栅格马赛克?

use*_*135 4 r

我在这里的帖子工作:如何使用栅格列表创建光栅马赛克?使用栅格列表创建栅格镶嵌.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
Run Code Online (Sandbox Code Playgroud)

我使用了如何迭代列表保留结果格式的函数生成我的栅格列表.

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
}
Run Code Online (Sandbox Code Playgroud)

然后我生成列表名称并从中创建我的栅格列表.

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)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

函数错误(classes,fdef,mtable):无法为签名'"missing","missing"找到函数'mosaic'的继承方法

我的raster.list就像这样开始(它包含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)
Run Code Online (Sandbox Code Playgroud)

小智 9

我的栅格没有正确命名.为了纠正这个问题,在调用它之前:

names(rasters.list) <- NULL
Run Code Online (Sandbox Code Playgroud)

然后:

raster.list$fun <- mean
mos <- do.call(mosaic, raster.list)
Run Code Online (Sandbox Code Playgroud)


Rob*_*ans 5

扩展一下 foo 的答案。您可以使用 sapply 创建 RasterLayer 对象列表。

rlist <- sapply(list_names)
Run Code Online (Sandbox Code Playgroud)

然后添加其他参数的名称。第一个是“x”和“y”(见?马赛克)。但是,如果它们为 NULL,它也将起作用(因为它们的位置将被使用)。

names(rlist)[1:2] <- c('x', 'y')
rlist$fun <- mean
rlist$na.rm <- TRUE
Run Code Online (Sandbox Code Playgroud)

现在打电话 do.call

x <- do.call(mosaic, rlist) 
Run Code Online (Sandbox Code Playgroud)