3

パッケージのextract関数を使用して、シェープファイルで定義された領域を使用してラスター ファイルからデータを抽出しています。rasterただし、このプロセスが現在必要とするメモリの量に問題があります。多数のシェープファイル (~1000) があります。ラスター ファイルが大きい (~1.6 GB)

私のプロセスは次のとおりです。

shp <- mclapply(list.files(pattern="*.shp",full.names=TRUE), readShapePoly,mc.cores=6)
ndvi <- raster("NDVI.dat")
mc<- function(y) {
temp <- gUnionCascaded(y)
extract <- extract(ndvi,temp)
mean <- range(extract, na.rm=T )[1:2]
leng <- length(output)
}
output <- lapply(shp, mc)

メモリ負荷を減らすためにできる変更はありますか? メモリが再び急増する前に、約 5 分間機能する少数のシェープファイルをロードしようとしました。8GB RAMを搭載した2.4GHzのクアッドコアコンピューター

4

1 に答える 1

4

私はこれを行います(未テスト):

## Clearly we need these packages, and their dependencies
library(raster)
library(rgeos)
shpfiles <- list.files(pattern="*.shp",full.names=TRUE)
ndvi <- raster("NDVI.dat")
## initialize an object to store the results for each shpfile
res <- vector("list", length(shpfiles))
names(res) <- shpfiles
## loop over files
for (i in seq_along(shpfiles)) {
  ## do the union
  temp <- gUnionCascaded(shpfiles[i])
  ## extract for this shape data (and don't call it "extract")
  extracted <- extract(ndvi,temp)
  ## further processing, save result
  mean <- range(extracted, na.rm = TRUE )[1:2]
  res[[i]] <- mean  ## plus whatever else you need
}

上記の mc() の戻り値が何を意味するのかはまったく明確ではないため、無視します。これは、最初に試したものよりもはるかにメモリ効率が高く、高速です。ここで並列のものを使用する価値があるとは思えません。

于 2013-03-29T07:29:09.357 に答える