【问题标题】:Using a for loop to write in multiple .grd files使用 for 循环写入多个 .grd 文件
【发布时间】:2013-11-04 17:53:22
【问题描述】:

我正在为 SDM 类处理非常大的数据层,因此我最终将我的一些层分成一堆块以避免内存限制。这些块被写成 .grd 文件,现在我需要将它们读回 R 并合并在一起。一般来说,我对 R 编程非常陌生,因此我们将不胜感激。到目前为止我一直在尝试的看起来像这样:

merge.coarse=raster("coarseBlock1.grd")
for ("" in 2:nBlocks){
  merge.coarse=merge(merge.coarse,raster(paste("coarseBlock", ".grd", sep="")))
}

我的文件在 roughBlock.grd 中的位置,从 1 到 nBlocks (259) 依次编号

任何反馈将不胜感激。

【问题讨论】:

    标签: r for-loop merge raster


    【解决方案1】:

    在 R 中使用 for 循环通常很慢。此外,在 for 循环中使用 mergerbind 之类的函数会占用大量内存,因为 R 将值传递给这些函数的方式。

    执行此任务的更有效方法是调用lapply(有关详细信息,请参阅this tutorial on apply functions)将文件加载到R中。这将产生一个列表,然后可以使用rbind函数折叠该列表:

    rasters <- lapply(list.files(GRDFolder), FUN = raster)
    merge.coarse <- do.call(rbind, rasters)
    

    【讨论】:

      【解决方案2】:

      我对 .grd 文件不太熟悉,但这个整体过程至少应该让您朝着正确的方向前进。假设您所有的 .grd 文件(1 到 259)都存储在同一个文件夹中(我将其称为 GRDFolder),那么您可以试试这个:

      merge.coarse <- raster("coarseBlock1.grd")
      for(filename in list.files(GRDFolder))
      {
        temp <- raster(filename)
        merge.coarse <- rbind(merge.coarse, temp)
      }
      

      【讨论】:

        猜你喜欢
        • 2021-07-06
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2014-07-29
        • 2011-10-25
        • 1970-01-01
        • 2016-11-21
        相关资源
        最近更新 更多