R的栅格功能为磁盘上的内存映射栅格提供了方便的句柄,从而可以处理非常大的数据集。 aggregate
函数以及软件包中的其他函数将获取输入栅格并创建分辨率更小的新栅格。
新返回的栅格是否存在于内存中,还是使用新的内存映射创建了磁盘上的临时副本?
答案 0 :(得分:1)
这取决于栅格大小和计算机可用的RAM数量。小数据集保存在内存中,大数据集存储在磁盘上。
使用{rasterOptions”,x
和canProcessInMemory
用maxmemory
确定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
将其“强制”到内存中。