我希望在一个较大的光栅堆栈(82兆)上运行
terra::as.matrix
。立即出现 std::bad_alloc 内存错误。我看到一些类似的已发布问题(例如 terra github 存储库上的 #562 和此处的其他地方),以及各种潜在的解决方案,但不确定哪条路径最适合我的情况。我没有将栅格分割成块或部分并单独处理每个块的经验。希望有一种方法可以配置 terra 来处理这个问题。
我尝试更改
terraOptions()
,包括,例如 terraOptions(memfrac=0.9)
和 terraOptions(steps=55)
。
光栅需要比我更多的内存来处理;我将比例从 0.6 提高到 0.9。参见:
mem_info(x)
------------------------
Memory (GB)
------------------------
check threshold : 1 (memmin)
available : 17.45
allowed (90%) : 15.7
needed (n=1) : 136.66
------------------------
proc in memory : FALSE
nr chunks : 10
------------------------
spatRaster 对象由 8 层组成;两个用于坐标,其他值来自 6 个组成栅格图层。
class : SpatRaster
dimensions : 42700, 53693, 8 (nrow, ncol, nlyr)
resolution : 10, 10 (x, y)
extent : 228888.5, 765818.5, 4807436, 5234436 (xmin, xmax, ymin, ymax)
coord. ref. : NAD_1983_CSRS_v6_UTM_Zone_20N
source : spat_6d442d83216d_27972.tif
names : xCoord, yCoord, chm, ndvi, hwba, swba, ...
min values : 5.247202e-07, 5.247202e-07, 0.0000000, 0.0000000, 0.00000000, 0.000000, ...
max values : 1.104672e-02, 8.504140e-03, 0.1438089, 0.1625947, 0.07315826, 0.522824, ...
该问题与 在大堆栈和许多点上使用 `terra::extract` 时出现错误 std::bad_alloc 和 对 terra 中非常大的栅格进行操作会导致 std::bad_alloc 但我找不到解决方案在那里解决我的问题。
这是我的代码的代表:
library(terra)
terraOptions(memfrac=0.9)
#terraOptions(steps = 55)
Trans.env.table <- terra::as.matrix(x)
mem_info(x)
我确实看到
proc in memory
默认为 FALSE。
mem_info(x)
建议您有 17.5 GB 可用内存,但需要 137 GB 才能将整个文件读入内存(由于压缩,磁盘上的文件大小不一样)。所以你不能这样做。
也许更重要的问题是为什么你认为你需要
as.matrix
。