"Failure during raster IO" 可能与光栅大小有关?
"Failure during raster IO" possibly related to raster size?
我在 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
我最终会在此代码中再次遇到错误,我正在创建一个名为 wfps_growSeas
的新栅格覆盖 2 个名为 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 表明此错误是由于栅格损坏造成的,但我认为这不是问题所在。有什么建议吗?
可能是因为您的磁盘空间不足 space,主要是在临时文件夹中。清理临时文件夹 and/or 将其设置到其他位置。参见 ?rasterOptions
通过将我的文件夹(以及保存在文件夹中的光栅)从 D 驱动器(外部 2 TB 固态硬盘驱动器)更改为计算机的 C 驱动器,问题得到了解决。
我仍然可以 运行 代码直接在我的 D 驱动器上使用较小的光栅大小(在这种情况下,实际上它上面还有足够的内存)。
我在 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
我最终会在此代码中再次遇到错误,我正在创建一个名为 wfps_growSeas
的新栅格覆盖 2 个名为 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 表明此错误是由于栅格损坏造成的,但我认为这不是问题所在。有什么建议吗?
可能是因为您的磁盘空间不足 space,主要是在临时文件夹中。清理临时文件夹 and/or 将其设置到其他位置。参见 ?rasterOptions
通过将我的文件夹(以及保存在文件夹中的光栅)从 D 驱动器(外部 2 TB 固态硬盘驱动器)更改为计算机的 C 驱动器,问题得到了解决。 我仍然可以 运行 代码直接在我的 D 驱动器上使用较小的光栅大小(在这种情况下,实际上它上面还有足够的内存)。