我有一组存储为.rds文件的大型栅格,比如
saveRDS(getwd(), readAll(raster))
(他们只有GTiff的一半,我不需要在GIS中打开它们)。通过
将它们变成堆栈rdses <- list.files(getwd(), pattern = '\\.rds$', full.names = TRUE)
maplist <- lapply(map_rds, function(x) readRDS(x))
mapstack <- raster::stack(map_list)
很好,但是当我将基于rds的堆栈发送到clusterR进行进一步处理时,例如
beginCluster(2)
clusterR(mapstack, calc, args (fun = myfun(x)), export = 'value')
endCluster()
R继续尝试在内存中运行整个操作,即使canProcessInMemory(mapstack)返回FALSE。由于缺少备用RAM,操作总是崩溃。
如果我将栅格保存为GeoTiff,然后将其堆叠并发送到clusterR,就不会发生这种情况 - 临时gri / grd文件会按原样创建并且RAM使用率很低。
有没有办法确保基于rds的堆栈的处理方式与基于GeoTiff的堆栈相同?
答案 0 :(得分:0)
我不知道为什么这不适用于rds文件,但也许您可以尝试强制库栅格在磁盘上工作:
if(raster:::.toDisk() != TRUE) {
setOptions(todisk = TRUE)
}