2017-07-19 25 views
0

我有一组存储为.rds文件大栅格,像clusterR不是在磁盘上处理时,它应该

saveRDS(getwd(), readAll(raster)) 

(他们GTiffs的一半大小,我并不需要打开它们在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() 

尽管canProcessInMemory(mapstack)返回FALSE,但R始终尝试运行内存中的整个操作。由于缺少备用RAM,操作总是崩溃。

如果我将栅格保存为GeoTiffs,然后将它们堆叠并发送到clusterR,则不会发生这种情况 - 临时的gri/grd文件应该被创建,并且RAM使用率很低。

有没有办法确保基于rds的堆栈的处理方式与基于GeoTiff的堆栈相同?

回答

0

我不知道为什么这不符合RDS文件的工作,但也许你可以尝试强制库光栅到磁盘上的工作:

if(raster:::.toDisk() != TRUE) { 
    setOptions(todisk = TRUE) 
} 
+0

谢谢 - 我给它一个镜头,但它没有任何效果在这种情况下。如果您查看栅格源代码,该选项仅用于强制'canProcessInMemory()'返回'FALSE',并且它已经在做这件事(并且我想,被忽略)。鉴于读取我所有的rds文件确实有可能填满较小机器的RAM,我想我只需要坚持使用GTIFF来处理光栅文件。 –