我正在寻找一种方法来提高速度并降低以下行的内存使用量:
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版本)。计算时间也非常长。关于如何改进代码的任何建议?
答案 0 :(得分:1)
加快速度的一些事情可能包括以下几点:
# 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分辨率吗?内存:使用光栅包中的功能时,请勿始终写入内存。而是尽可能在外部写入,否则会出现内存错误。
如果您有多部分多边形(SpatialPolygonDataframe对象)。只需运行一次提取功能,然后取消列表然后运行功能。
{{1}}
从光栅包中取出替代方法或尝试使用getValues。请参阅以下主题: