从大栅格层随机抽样

标签 r raster

我有一个很大的 Rasterlayer,其整数范围从 0 到 44。

class       : RasterLayer
dimensions  : 29800, 34470, 1027206000  (nrow, ncol, ncell)
resolution  : 10, 10  (x, y)
extent      : 331300, 676000, 5681995, 5979995  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs
data source : /home/mkoehler/stk_rast_whz
names       : stk_rast_whz
values      : 0, 44  (min, max)

我想进行每层 5000 个点的分层抽样。 我收到以下错误:

POINTS<-sampleStratified(b, size=5000, na.rm=T, xy=F)
(Error in ys[[i]] <- y : attempt to select less than one element)

这是重现问题的代码(即使只选择 1 每层项目):

 set.seed(10)
 r <- raster(ncol=5000, nrow=5000)
 names(r) <- 'stratum'
 r[] <- round((runif(ncell(r)))*44)

 sampleStratified(r, size=1,xy=T)

Error in ys[[i]] <- y : attempt to select less than one element

尝试使用较少的层并更改“大小”的设置或 “exp”无效。 R 版本:[64 位] C:\Program Files\R\R-3.1.1

有什么想法吗?

提前致谢!

最佳答案

这似乎是一个错误(如 raster 2.3-12),并且在 (1) 您的栅格包含值为 0 的像元时发生。 , (2) 栅格无法在内存中处理(即 canProcessInMemory(r)FALSE )。

该函数遍历 freq(r) 生成的唯一单元格值, 然后依次按这些值中的每一个索引列表。如果这些值之一为零,则会触发错误,因为第 0 个元素不存在。例如:

list()[[0]]
# Error in list()[[0]] : attempt to select less than one element]

您会注意到,如果您填写 r,则不会发生错误例如,r[] <- sample(44, ncell(r), replace=TRUE) ,因为它不会有任何零。

当栅格可以在内存中处理时,函数循环遍历 freq(r) 的行号。 , 因此后续的列表索引是明智的。

我已联系维护人员报告此错误。

与此同时,作为临时修复,您可以使用类似下面的内容来制作函数的更正副本(它将在当前 R session 中保持可用)。

sampleStratified2 <- 
  eval(parse(text=sub('sr\\[, 2\\] == i', 'sr[, 2] == f[i, 1]',
                      sub('i in f\\[, 1\\]', 'i in seq_len(nrow(f))',
                          deparse(getMethod(sampleStratified, 
                                            signature='RasterLayer')@.Data))
  )))

sampleStratified2(r, size=1, xy=TRUE)

关于从大栅格层随机抽样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27483130/

相关文章:

r - 在 levelplot 面板区域之外添加文本

performance - 在 GPU 上栅格化多边形以进行 HitTest

r - 从 R 中的 jpeg 图像中提取 RGB channel

r - 将栅格的水平图面板与分类变量的水平图叠加

r - 在 R 中绘制二元图

r - 将 R 中的日期从破折号转换为斜线格式?

r - 与 dplyr 等长的组

r - 如何更好地可视化非常偏态的分布

c++ - base-R seq 的 Rcpp 版本丢弃值

r - 为什么 ncol 选项在 R 中的 facet_grid 中不起作用