无法打开在 R 中创建的栅格

Nuh*_*amy 0 r raster temporary-files

我有两个与该错误相关的问题:

第一:我有一个合并的 dem 层和多个 shapefile,我创建了一个蒙版 shapefile 边界列表,我能够绘制所有这些,除了一个“第一个”,它是最大的一个:

> plot(DEM_masked_list[[1]])

Error in file(fn, "rb") : cannot open the connection
In addition: Warning message:
  In file(fn, "rb") :
  cannot open file '/private/var/folders/2w/rjzwcrbn3pg0jmsrfkz7n52h0000gn/T/RtmpkL8Ot5/raster/r_tmp_2018-01-29_014745_982_20879.gri': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我注意到第一个 dem 的数据源与所有其他 dem 不同,这可能是由于它的尺寸较大(单元格数量为 509141570)!

DEM_masked_list

[[1]]
class       : RasterLayer 
dimensions  : 20015, 25438, 509141570  (nrow, ncol, ncell)
resolution  : 9.259259e-05, 9.259259e-05  (x, y)
extent      : -70.43231, -68.07694, 45.98676, 47.84  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs 
data source : /private/var/folders/2w/rjzwcrbn3pg0jmsrfkz7n52h0000gn/T/RtmpkL8Ot5/raster/r_tmp_2018-01-29_014745_982_20879.grd 
names       : layer 
values      : 121.4266, 856.6606  (min, max)


[[2]]
class       : RasterLayer 
dimensions  : 9043, 9896, 89489528  (nrow, ncol, ncell)
resolution  : 9.259259e-05, 9.259259e-05  (x, y)
extent      : -69.76269, -68.84639, 46.23528, 47.07259  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs 
data source : in memory
names       : layer 
values      : 187.9911, 650.0044  (min, max)
Run Code Online (Sandbox Code Playgroud)

第二:我将 25 个独立的 dem 合并到一层(DEM_merged),数据源也没有存储在内存中,我能够绘制它并使用它一天,即 2018-01-28(出现在数据源中) ,然后出现同样的错误。

> DEM_merge
class       : RasterLayer 
dimensions  : 75612, 75612, 5717174544  (nrow, ncol, ncell)
resolution  : 9.259259e-05, 9.259259e-05  (x, y)
extent      : -74.00056, -66.99944, 40.99944, 48.00056  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs 
data source : /private/var/folders/2w/rjzwcrbn3pg0jmsrfkz7n52h0000gn/T/RtmpkL8Ot5/raster/r_tmp_2018-01-28_163201_982_66674.grd 
names       : layer 
values      : -81.04944, 1915.734  (min, max)

> plot(DEM_merge)
Error in file(fn, "rb") : cannot open the connection
In addition: Warning message:
  In file(fn, "rb") :
  cannot open file '/private/var/folders/2w/rjzwcrbn3pg0jmsrfkz7n52h0000gn/T/RtmpkL8Ot5/raster/r_tmp_2018-01-28_163201_982_66674.gri': No such file or directory
> 
Run Code Online (Sandbox Code Playgroud)

有什么办法可以解决这个问题吗?我觉得 Raster 包及其存储数据的方式存在一些问题,我尝试重新安装 Raster 包,重新安装 R,即使我在此处发布后使用了不同的计算机,但仍然存在相同的问题,感谢您的帮助!

Rob*_*ans 7

大型 Raster* 对象的值将写入文件,以避免内存限制问题。如果您没有明确提供文件名,它们将存储在临时数据文件夹中,该文件夹将在 R 会话结束时删除。

我猜您创建了 RasterLayers 并将列表保存到磁盘,然后关闭了 R?或者也许您在再次打开 R 时重新加载了会话?

只是猜测,但如果是这样,那么大栅格的值确实应该消失了。为了避免这种情况发生,您可以尝试将所有值强制写入内存readAll(不推荐),或者将它们写入永久文件writeRaster

  • 作为一般做法,您不应将 Raster* 对象保存到 rds。请改用 writeRaster。这是因为大对象由磁盘上的临时文件支持,这些临时文件在会话结束时消失。 (2认同)