在大型 RasterStack 上使用 writeRaster 时出错
Error using writeRaster on a large RasterStack
我在 R 中有一个名为 "preds2" 的 RasterStack,大小为 4.1 GB,由 4 个 RasterStacks 和 2 个 RasterLayers(wveg、wfps_lag、wfps、ndvi、swt、lu)输出:
cl <- makeCluster(4)
registerDoSNOW(cl)
preds<-foreach(j = 1:nlayers(ndvi))%dopar%{
library(raster)
library(SpaDES)
time <- stack(wveg,wfps_lag[[j]],wfps[[j]],ndvi[[j]],swt[[j]],lu)
names(time) <- c('wveg','wfps_lag','wfps','ndvi','swt','lu')
exp(raster::predict(time,m,const=fact_table,exclude=c("s(wlch)","s(wetid)")))
}
stopCluster(cl)
preds2<-stack(preds)
> preds2
class : RasterStack
dimensions : 6617, 11771, 77888707, 27 (nrow, ncol, ncell, nlayers)
resolution : 0.0002694946, 0.0002694946 (x, y)
extent : -95.69591, -92.52369, 41.71803, 43.50128 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
names : layer.1, layer.2, layer.3, layer.4, layer.5, layer.6, layer.7, layer.8, layer.9, layer.10, layer.11, layer.12, layer.13, layer.14, layer.15, ...
min values : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
max values : 0.001754114, 0.001754114, 0.001754114, 0.001754114, 0.001730909, 0.001601078, 0.081421784, 3.510447853, 5.134697329, 7.547881571, 10.945457688, 13.332227330, 14.864517447, 16.708383138, 16.631466329, ...
我正在尝试将此 RasterStack 写入 .tif 文件但出现错误:
> writeRaster(stack(preds3), filename = "C:\Users\RL\Documents\preds.tif", options="INTERLEAVE=BAND", overwrite=TRUE)
Error in file(fn, "rb") : cannot open the connection
In addition: Warning message:
In file(fn, "rb") :
cannot open file 'C:\Users\RL\AppData\Local\Temp\RtmpeegnBN\raster\r_tmp_2020-04-25_004109_2364_37231.gri': No such file or directory
在对象 "preds2" 上使用 calc
也出现同样的错误。我之前使用此代码创建了更小的 RasterStacks,没有任何问题。在线博客和文档表明此错误可能是由于它是一个很大的 RasterStack(例如建议将 "preds2" 存储为 rasterTmpFile
但我在读取临时文件时仍然遇到相同的错误)。对代码的建议(因为我是 R 的新手)将不胜感激。谢谢!
弄清楚了——问题是 RasterStack 太大而无法存储在 R 的工作内存中,而是保存到我计算机上的一个临时文件中,无论出于何种原因,我都无法找到或访问该文件在 R 中。所以我只是指定了临时工作目录。
options(rasterTmpDir = "C:\Users\RL\Temp_R_folder")
我在 R 中有一个名为 "preds2" 的 RasterStack,大小为 4.1 GB,由 4 个 RasterStacks 和 2 个 RasterLayers(wveg、wfps_lag、wfps、ndvi、swt、lu)输出:
cl <- makeCluster(4)
registerDoSNOW(cl)
preds<-foreach(j = 1:nlayers(ndvi))%dopar%{
library(raster)
library(SpaDES)
time <- stack(wveg,wfps_lag[[j]],wfps[[j]],ndvi[[j]],swt[[j]],lu)
names(time) <- c('wveg','wfps_lag','wfps','ndvi','swt','lu')
exp(raster::predict(time,m,const=fact_table,exclude=c("s(wlch)","s(wetid)")))
}
stopCluster(cl)
preds2<-stack(preds)
> preds2
class : RasterStack
dimensions : 6617, 11771, 77888707, 27 (nrow, ncol, ncell, nlayers)
resolution : 0.0002694946, 0.0002694946 (x, y)
extent : -95.69591, -92.52369, 41.71803, 43.50128 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
names : layer.1, layer.2, layer.3, layer.4, layer.5, layer.6, layer.7, layer.8, layer.9, layer.10, layer.11, layer.12, layer.13, layer.14, layer.15, ...
min values : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
max values : 0.001754114, 0.001754114, 0.001754114, 0.001754114, 0.001730909, 0.001601078, 0.081421784, 3.510447853, 5.134697329, 7.547881571, 10.945457688, 13.332227330, 14.864517447, 16.708383138, 16.631466329, ...
我正在尝试将此 RasterStack 写入 .tif 文件但出现错误:
> writeRaster(stack(preds3), filename = "C:\Users\RL\Documents\preds.tif", options="INTERLEAVE=BAND", overwrite=TRUE)
Error in file(fn, "rb") : cannot open the connection
In addition: Warning message:
In file(fn, "rb") :
cannot open file 'C:\Users\RL\AppData\Local\Temp\RtmpeegnBN\raster\r_tmp_2020-04-25_004109_2364_37231.gri': No such file or directory
在对象 "preds2" 上使用 calc
也出现同样的错误。我之前使用此代码创建了更小的 RasterStacks,没有任何问题。在线博客和文档表明此错误可能是由于它是一个很大的 RasterStack(例如建议将 "preds2" 存储为 rasterTmpFile
但我在读取临时文件时仍然遇到相同的错误)。对代码的建议(因为我是 R 的新手)将不胜感激。谢谢!
弄清楚了——问题是 RasterStack 太大而无法存储在 R 的工作内存中,而是保存到我计算机上的一个临时文件中,无论出于何种原因,我都无法找到或访问该文件在 R 中。所以我只是指定了临时工作目录。
options(rasterTmpDir = "C:\Users\RL\Temp_R_folder")