R栅格包:使用“getValuesFocal”函数时内存不足

时间:2014-10-17 20:13:03

标签: r r-raster

我有3层的光栅(1300×1400个单元格),我想使用来自所有3个层的数据进行焦点计算。例如,其中一个层是土地覆盖图,我想在计算中仅使用焦点窗口中具有与窗口的中心像素相同的土地覆盖类型的这些像素。我想这对于光栅包中的“焦点”功能是不可能的,这就是为什么我试图通过“getValuesFocal”从每个移动窗口范围的3个图层中提取数据的原因。在这样做之后,我的想法是遍历由“getValuesFocal”产生的数组行。然而,数组非常大,不适合内存,所以我收到错误消息:

dataraster <- stack(classification, layer2, layer3)
data <- getValuesFocal(dataraster, ngb=11, names=TRUE, padValue=NA, array=TRUE)
Error: cannot allocate vector of size 1.7 Gb
In addition: Warning messages:
1: In `rownames<-`(`*tmp*`, value = 1:1879200) :
  Reached total allocation of 8008Mb: see help(memory.size)

我知道像ff和bigmemory这样的软件包允许处理大数据集,但是当我的数据集最初无法创建时,如何使用它们。我使用64位R并拥有8GB RAM。有没有办法在文件中写“getValuesFocal”的结果?我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用rownrows参数读取数据库中的数据。例如

library(raster)
r <- raster(nr=5, nc=5, crs='+proj=utm +zone=12')
r[] <- 1:25
as.matrix(r)
getValuesFocal(r, row=1, nrows=2, ngb=3, names=TRUE)