使用R提高{raster}处理的速度:第1/3部分

Hey there 栅格R folks!
我喜欢用R编码–我大部分时间都在花时间使用{raster}软件包处理栅格数据,因为’与其他脚本语言相比,它非常直观且易于使用。但是有时候,当我处理较大的数据集或必须处理大量文件时,漫长而漫长的处理时间使我想知道R是否始终是最佳选择…当然是这样!您只需要知道如何通过以下两种方法来提高R的性能 编写更有效的代码 要么 并行化 您的R函数。由于这对于许多R初学者和一些高级编码人员来说似乎是一个很大的摇篮,所以我决定编写一个有关此主题的教程:它由三部分组成,其中我将描述如何加快光栅包的处理时间。 。

今天,我们将对该主题进行简短介绍,并且我将向您展示如何通过在R会话中设置一些本地rasterOptions()来加快处理时间,这将为您带来良好的初始速度提升。

栅格Options()

{raster}包中的rasterOptions()函数使您可以自定义R会话。如果您输入 栅格Options() 没有参数,您可以看到当前(默认)设置:

> 栅格Options()
format        : 栅格
datatype      : FLT8S
overwrite     : FALSE
progress      : none
timer         : FALSE
chunksize     : 1e+07
maxmemory     : 1e+08
tmpdir        : /var/folders/lk/hg070f5n4md9hrchf__th6080000gn/T//RtmpQrCgZD/raster//
tmptime       : 168
setfileext    : TRUE
tolerance     : 0.1
standardnames : TRUE
warn depracat.: TRUE
header        : none

有两个参数对{raster}软件包的性能有很大影响: 块大小最大内存.

  • 块大小: 整数。在处理(逐块)基于磁盘的Raster *对象时,单个块中可读取/写入的最大单元数
  • 最大内存: 整数。要读入内存的最大单元数。

最大内存的默认值为1e + 08。让我们看看增加最大内存限制时,简单栅格计算的处理时间是否以及如何变化。要增加限制,您可以简单地编写:

栅格Options(maxmemory = 1e+09)

基准测试

为了测试对最大内存设置的处理时间的影响,我将Landsat 8子集加载到R中并进行了简单的计算:十次,最大内存限制为1e + 08,十次,限制为1e + 09:

Here is an summary on the 栅格 image that was used for the benchmark:

class       : RasterStack
dimensions  : 3485, 4606, 16051910, 5  (nrow, ncol, ncell, nlayers)
resolution  : 30, 30  (x, y)

And here the code for the simple (nonsene) 栅格 calulation to evaluate the time:

start <- Sys.time()
ras_calc <- ras ^ 2 + ras
end <- Sys.time()
difftime(end,start)

结果:

从1e + 08到1e + 09的最大内存限制增加所节省的时间非常可观。执行简单计算任务平均需要61秒的下限内存(1e + 08)。较高的限制(1e + 09)的性能要好得多,只需要大约35秒即可执行相同的任务。您可以在下面的方框图中看到最终结果:

最大内存基准
我希望这对某些人有用。本教程的第二部分 “使用R提高{raster}处理的速度” 将介绍如何使用{foreach}和{doParallel}包并行化R代码。
再见!

马丁

关于作者

马丁出生于捷克共和国,就读于维也纳自然资源与生命科学大学。他目前在GeoVille(一家位于奥地利的地球观测公司)工作,专门从事土地监测。他的主要兴趣是:开源应用程序,例如R,(地理空间)统计和数据管理,Web映射和可视化。他喜欢旅行,寻宝,摄影和运动。

4条留言

您可以在这篇文章中发表评论。

发表回复

*