R 的栅格函数返回新栅格是否在磁盘上工作?
Do R's raster functions returning new rasters work on-disk?
R 的栅格功能为磁盘上的内存映射栅格提供了一个方便的句柄,允许处理非常大的数据集。 aggregate
函数和包中的其他函数采用输入栅格并创建分辨率较小的新栅格。
新返回的栅格是否存在于内存中,或者是使用新的内存映射创建的磁盘临时副本?
我相信新创建的对象存储在磁盘上的临时副本中,但它们可以 "forced" 使用 raster::readALL
进入内存。
见
这取决于光栅大小和计算机可用的 RAM 量。小数据集保存在内存中,大数据集保存在磁盘上。
使用 canProcessInMemory
、"rasterOptions"、maxmemory
和 memfrac
来决定 x
是小还是大
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
returns FALSE
。
要确定 Raster* 对象 x
是否使用文件,您可以
filename(x)
#[1] ""
如果returns是一个空字符串,则没有文件。您可以使用 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
将临时文件夹设置到其他位置(不推荐))
R 的栅格功能为磁盘上的内存映射栅格提供了一个方便的句柄,允许处理非常大的数据集。 aggregate
函数和包中的其他函数采用输入栅格并创建分辨率较小的新栅格。
新返回的栅格是否存在于内存中,或者是使用新的内存映射创建的磁盘临时副本?
我相信新创建的对象存储在磁盘上的临时副本中,但它们可以 "forced" 使用 raster::readALL
进入内存。
见
这取决于光栅大小和计算机可用的 RAM 量。小数据集保存在内存中,大数据集保存在磁盘上。
使用 canProcessInMemory
、"rasterOptions"、maxmemory
和 memfrac
x
是小还是大
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
returns FALSE
。
要确定 Raster* 对象 x
是否使用文件,您可以
filename(x)
#[1] ""
如果returns是一个空字符串,则没有文件。您可以使用 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
将临时文件夹设置到其他位置(不推荐))