基于R中的多边形范围总结栅格值的更快方法

时间:2016-10-03 13:52:59

标签: r memory sum raster

我正在寻找一种方法来提高速度并降低以下行的内存使用量:

  export <- raster(paste0(catch_dir,'/export_streams.rst'))
  catchm_polyg <- readOGR(dsn = catch_dir, layer = 'catchment')
  Model_10 <- extract(export, catchm_polyg, fun = sum, na.rm = TRUE ) 

这给出了来自export_streams.rst的所有值的总和,其中catchm_polyg作为范围。

我想为不同的输入数据做很多次。因此,代码是function的一部分,然后在foreach循环中使用。这一切都在一定程度上工作正常。但是,代码不适用于较大的输入数据,因为我显然没有足够的内存(32gb,64位R版本)。计算时间也非常长。关于如何改进代码的任何建议?

1 个答案:

答案 0 :(得分:1)

加快速度的一些事情可能包括以下几点:

  1. 问问自己:我可以使用sum函数首先# quickly summarise across multiple polygons allmyvals <- extract(myrast, myploys) myploys$sum_in_poly <- unlist(lapply(allmyvals , function(x) if (!is.null(x)) sum(x, na.rm=TRUE) else NA )) 我的光栅达到courser分辨率吗?
  2. 内存:使用光栅包中的功能时,请勿始终写入内存。而是尽可能在外部写入,否则会出现内存错误。

  3. 如果您有多部分多边形(SpatialPolygonDataframe对象)。只需运行一次提取功能,然后取消列表然后运行功能。

    {{1}}
  4. 从光栅包中取出替代方法或尝试使用getValues。请参阅以下主题: