“栅格IO失败,可能与栅格大小有关?

问题描述 投票:0回答:1

我在R中具有非常大的栅格。我有一个以前可以运行的代码,并且具有相同的大栅格,但是当我尝试再次运行我的代码以提高可重复性时,出现了相同的错误“失败在栅格IO期间”。

例如,在这段代码中,我试图将一个较大的栅格(〜5 GB)分成较小的图块,以便加快R中的处理时间。

large_raster <- stack("D:/large_raster.tif")
tileno <- 2 # split the large raster into 2 tiles

cl <- makeCluster(3)
registerDoSNOW(cl)
foreach(i = 1:nlayers(large_raster))%dopar%{
  library(raster)
  library(SpaDES)
  removeTmpFiles(h=0)
  newraster <- splitRaster(large_raster[[i]],nx=tileno,ny=1)
  for(j in 1:length(newraster)){
    if(i<10){
      writeRaster(newraster[[j]], filename=paste("D:/large_raster_layer0", i, "_tile", j, ".tif",sep=""))
    }else{
      writeRaster(newraster[[j]],filename=paste("D:/large_raster_layer", i, "_tile", j, ".tif",sep = ""))
    }
  }  
}
stopCluster(cl)

#stack tiles
dir <- ("D:/")
for(j in 1:tileno){
  tiles<-list.files(dir,pattern=paste("tile",j,sep=""))
  for(i in 1:length(tiles)){
    r<-raster(paste(dir,tiles[i],sep=""))
    if(i==1){s<-stack(r)
    }else{s<-stack(s,r)}
  }
  writeRaster(s, filename = paste("D:/large_raster_tile", j, ".tif", sep=""))
}

但是我得到了错误

Error in rgdal::getRasterData(object@file@con, offset = offs, region.dim = reg,  : 
  Failure during raster IO

[如果我跳过平铺步骤并最终使用5 GB large_raster,则会最终在此代码中再次出现错误,在该代码中,我将通过覆盖2个其他名为wfps_growSeas的栅格来创建一个名为dswe2wfps的新栅格]和swt

cl <- makeCluster(3)
registerDoSNOW(cl)

wfps_growSeas <- foreach(j = 1:nlayers(dswe2wfps))%dopar%{
  library(raster)
  overlay(dswe2wfps[[j]],swt[[j]], fun=function (x,y){
    x[y[]<=5]<-0
    return (x)},filename=paste("D:/temp2delete/raster",j, "_", info, ".tif",sep=""),overwrite=TRUE)
}  
stopCluster(cl)

wfps_growSeas <- stack(wfps_growSeas)

我得到错误:

Error in { : task 1 failed - "Failure during raster IO

奇怪的是,这些错误是最近发生的。几周前,我能够使用这些完全相同的大型栅格来运行此确切的代码,而目前,我能够使用较小的栅格来运行这些编码的内容。我正在使用R-3.6.2,但同事们建议此错误通常与纯粹的栅格大小和R的内存有关。 This post表示此错误是由于光栅损坏所致,但我认为这不是问题所在。有什么建议吗?

r memory spatial raster r-raster
1个回答
0
投票

可能是因为您没有足够的磁盘空间,通常是在temp文件夹中。清洁临时文件夹和/或将其设置在其他位置。参见?rasterOptions

© www.soinside.com 2019 - 2024. All rights reserved.