1

我正在使用 terra 包中的初始化函数在 RStudio 中创建栅格。根据文档,此功能应该适用于大型栅格,但是当我尝试为所有单元格创建一个具有单个值的 10,000 x 10,000 栅格时,我在 RStudio 中遇到了一个致命错误。

使用示例代码按预期工作

r <- rast(ncols=10, nrows=5, xmin=0, xmax=10, ymin=0, ymax=5)
z <- init(r, fun=8) # works

但是,当我将尺寸增加到 10k x 10k 时,会发生致命错误。

r <- rast(ncols=10000, nrows=10000, xmin=0, xmax=10000, ymin=0, ymax=10000)
z <- init(r, fun=8) # crashes

在我的 Macbook Pro 上观察活动监视器显示,当 RStudio 进程超过 80GB 的 RAM 运行代码时,内存压力会达到峰值。我的计算机上有 16GB 的 RAM,所以我认为问题可能与某些内存问题有关?

我不确定该功能是否未按预期工作,或者问题是否出在 RStudio 上。还是我做错了什么?

任何帮助将不胜感激。

我的规格:
操作系统:Monterey 12.0.1
芯片:Apple M1 Pro。
R 版本:4.1.2 (2021-11-01)
RStudio 版本:2021.9.1.372 《鬼兰花》

编辑:

大地版本:1.4.22

我在@FKneip 的链接中尝试了 rhijmans 推荐的两种解决方案,但都导致了与以前相同的致命错误。

r <- rast(ncols=10000, nrows=10000) # works

values(r) <- 1 # crashes
z <- init(r, 1, filename="test.tif", datatype="INT1U") # crashes
4

1 回答 1

0

这不是问题的真正解决方案,但它是我刚刚找到的临时解决方法。使用 terra 中的分类功能对空栅格进行重新分类(见下文)。这也有助于对已经填充了值的现有 10k x 10k 栅格进行重新分类。有关?classify如何rcl=根据栅格值输入参数矩阵的详细信息,请参阅。

r <- rast(ncols=10000, nrows=10000)
r
class       : SpatRaster 
dimensions  : 10000, 10000, 1  (nrow, ncol, nlyr)
resolution  : 0.036, 0.018  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 

x <- classify(r, rcl = matrix(c(NA,1), 1, 2, byrow = TRUE), right=NA) # does not crash
x
class       : SpatRaster 
dimensions  : 10000, 10000, 1  (nrow, ncol, nlyr)
resolution  : 0.036, 0.018  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 
source      : memory 
name        : lyr.1 
min value   :     1 
max value   :     1 

于 2022-01-07T21:49:54.920 回答