使用for循环写入多个.g​​rd文件

时间:2013-11-04 17:53:22

标签: r for-loop merge raster

我正在为SDM类使用非常大的数据层,因此我最终将一些层分成一堆块以避免内存限制。这些块被写成.grd文件,现在我需要将它们读回R并合并在一起。我对一般的编程非常陌生,所以任何帮助都会受到赞赏。到目前为止我一直在尝试的是这样的:

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

我的文件在coarseBlock.grd中,并从1到nBlocks顺序编号(259)

非常感谢任何反馈。

2 个答案:

答案 0 :(得分:1)

在R中使用for循环通常很慢。另外,在merge循环中使用rbindfor等函数会占用大量内存R将值传递给这些函数。

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

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

答案 1 :(得分:0)

我对.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)
}