合并前循环删除空栅格

时间:2018-08-13 14:46:02

标签: r for-loop raster

尝试从此链接下载NDIV数据 https://gimms.gsfc.nasa.gov/MODIS/std/GMOD09Q1/tif/NDVI/2009/001/

由于NDVI数据来自图块,因此我指定了我想要的图块

h.tile <- c("08","09","10", "11", "12", "13", "14", "15", "16")
v.tile <- c("09", "10", "11", "12", "13", "14")

我要下载2009年和001天

for(h in seq_along(h.tile)){
  for(v in seq_along(v.tile)){

    horizontal <- h.tile[h]
    vertical <- v.tile[v]

    time.stamp <- paste0("GMOD09Q1.A2009001.08d.latlon.x",horizontal,"y",vertical,".6v1.NDVI.tif.gz")
    URL <- "https://gimms.gsfc.nasa.gov/MODIS/std/GMOD09Q1/tif/NDVI/2009/001/"

    full.link <- paste0(URL, time.stamp)

    output <- paste0(time.stamp)
    curl::curl_fetch_disk(paste0(full.link), path = output)
  }}

这会将NDVI文件下载到一个文件夹。我想合并图块以生成单个图像

首先解压缩.tif文件

ndvi.files <- list.files()
ldply(.data = ndvi.files, .fun = gunzip) # note: this will remove the .gz files

现在合并

ndvi.files <- list.files()
raster.list <- list()

for(i in seq_along(ndvi.files)){raster.list[[i]] <- raster(ndvi.files[i])}  

但是,某些下载的文件为空,因此上述循环将不起作用。如果没有文件为空,则以下代码将起作用并将所有单个图块合并为一个。

raster.list$filename <- 'test.tif'
raster.list$overwrite <- TRUE
m <- do.call(merge, raster.list)
plot(m)

我的问题在上面的循环中

for(i in seq_along(ndvi.files)){raster.list[[i]] <- raster(ndvi.files[i])}  

循环中是否有任何方法,我可以排除空文件。我可以转到文件夹并手动删除所有空文件。但是,此循环是更大循环的一部分,因此我无法提前说出哪些文件为空。因此,基本上,我希望能够运行上述循环,以便仅在raster.list中读取那些填充的栅格。另外,R中有什么方法可以在运行循环之前删除空文件

`for(i in seq_along(ndvi.files)){raster.list[[i]] <- raster(ndvi.files[i])}` 

0 个答案:

没有答案