2016-12-25 13 views
1

私は各セルの平均を計算したい400個のラスターをスタックしています。パッケージラスタで「平均」という関数を使用していますが、時間がかかりすぎています。大きなスタックの平均を計算する代替関数/パッケージがありますか?r - ラスタースタックで平均の計算が速くなる

# brief example 
logo <- stack(system.file("external/rlogo.grd", package="raster")) 
logoMean=mean(logo) 
+0

'平均(ロゴ)は'かなり[私のテスト](https://gist.github.com/romunov/c9d1ca1628cfbca873679835a90cc395)に比べて最適化することが表示されます。おそらく、data.tableのソリューションがそれを上回ります。 –

答えて

2

計算がセル単位である限り、並列化を使用できます。並列ラスタ処理に最も簡単にアクセスするには、raster-packageclusterR関数を使用します。これはもちろん、十分な大きさのラスタファイルでは意味をなさないので、オーバーヘッドは実際に処理を遅くしません。

library(raster) 
logo <- stack(system.file("external/rlogo.grd", package="raster")) 
ncores <- 4 # define the number of cores you want to use 
beginCluster(ncores) 
logoMean <- clusterR(logo, mean, args=list(na.rm=TRUE)) 
endCluster() 

logoMean_old <- mean(logo) 
identical(logoMean, logoMean_old)