首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“栅格IO失败”可能与栅格大小有关?

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

Stack Overflow用户
提问于 2020-05-29 04:02:27
回答 2查看 1.5K关注 0票数 0

我在R中使用非常大的栅格,我有一个代码,我以前已经能够用相同的大栅格运行过,但是当我试图再次运行我的代码以获得可重复性时,我得到了相同的错误“在栅格IO期间失败”。

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

代码语言:javascript
复制
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=""))
}

但是我得到了一个错误

代码语言:javascript
复制
Error in rgdal::getRasterData(object@file@con, offset = offs, region.dim = reg,  : 
  Failure during raster IO

如果跳过分块步骤,仅使用5 GB的large_raster,则在此代码中将再次出现错误,其中我将通过叠加名为dswe2wfpsswt的其他两个栅格来创建名为wfps_growSeas的新栅格

代码语言:javascript
复制
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)

然后我得到了错误:

代码语言:javascript
复制
Error in { : task 1 failed - "Failure during raster IO

奇怪的是,这些错误最近才发生。几周前,我能够用完全相同的大栅格运行这段代码,而现在,我可以用更小的栅格运行这些编码的代码。我使用的是R-3.6.2,但同事们建议这个错误通常与纯粹的光栅大小和R的内存有关。This post建议这个错误是由于损坏的栅格,但我不认为这是问题所在。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-05 00:04:56

通过将我的文件夹(以及保存在文件夹中的栅格)从D驱动器(外部2 TB固态硬盘)更改为我电脑的C驱动器,解决了此问题。我仍然可以直接在我的D驱动器上运行处理较小栅格大小的代码(在这种情况下,它实际上仍然有足够的内存)。

票数 0
EN

Stack Overflow用户

发布于 2020-05-30 00:56:11

可能是因为磁盘空间不足,主要是因为临时文件夹中的磁盘空间不足。清理临时文件夹和/或将其设置到其他位置。请参阅?rasterOptions

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62073552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档