R的返回新栅格的栅格函数是否可以在磁盘上工作?

时间:2019-01-23 14:23:54

标签: r memory raster ram

R的栅格功能为磁盘上的内存映射栅格提供了方便的句柄,从而可以处理非常大的数据集。 aggregate函数以及软件包中的其他函数将获取输入栅格并创建分辨率更小的新栅格。 新返回的栅格是否存在于内存中,还是使用新的内存映射创建了磁盘上的临时副本?

2 个答案:

答案 0 :(得分:1)

这取决于栅格大小和计算机可用的RAM数量。小数据集保存在内存中,大数据集存储在磁盘上。

使用{rasterOptions”,xcanProcessInMemorymaxmemory确定memfrac是小还是大

library(raster)
x <- raster(res=1/12)
values(x) <- 1

rasterOptions()
#maxmemory     : 1e+09 
#memfrac       : 0.6 

canProcessInMemory(x, verbose=TRUE) 
#memory stats in GB
#mem available: 50.07
#        60%  : 30.04
#mem needed   : 0.28
#max allowed  : 0.93  (if available)

#[1] TRUE

在上面的示例中,有50 GB的可用RAM。可以使用的最大分数是可用RAM(0.6*50=30 GB)或maxmemoy的0.6倍,以较小者为准。 maxmemory以字节表示,因此为1e+09 / 1073741824 = 0.93 GB

为避免将数据写入磁盘(这会减慢速度),可以将maxmemory设置为更大的数字,甚至设置为Inf

rasterOptions(maxmemory=Inf)

maxmemory的默认值将在以后的版本中增加。

在2.8版(当前正在开发)中,存在第三个条件。如果Raster *的像元数大于(2 ^ 31-1; R中的最高整数),则canProcessInMemory返回FALSE

要确定Raster *对象x是否使用文件,可以执行

filename(x)
#[1] ""

如果is返回一个空字符串,则没有文件。您可以使用todisk选项强制写入文件(仅用于测试目的)

y <- x * 1
filename(y)
#[1] ""

rasterOptions(todisk=TRUE)
y <- x * 1
filename(y)
#"/temp/RtmpQN2nYn/raster/r_tmp_2019-01-27_120723_22156_26708.grd"

如果要文件,最好使用大多数方法都具有的filename参数。

会话结束时,临时文件将被删除(除非您使用rasterOptions将临时文件夹设置到其他位置(不推荐))

答案 1 :(得分:0)

我相信新创建的对象存储在磁盘上的临时副本中,但是可以使用raster::readALL将其“强制”到内存中。

请参见https://stackoverflow.com/a/54314986/3362993