2012 年 9 月 17 日更新
これは、私の問題を再現する自己完結型データを使用したコードです。
心に留めておいてください、私が持っている実際のデータの次元は巨大です...
次元: 3105、7025、21812625、12 (nrow、ncol、ncell、nlayers)
私が必要とするのは、各行の最大値のインデックスです。レイヤー全体の列です。すべての NA は NA を返す必要があり、複数の最大コピーは最初の最大インデックスを返す必要があります (または、他の何かが一貫している必要があります)。
# Create a test RasterStack
require(raster)
a <- raster(matrix(c(11,11,11,
NA,11,11,
11,11,13),nrow=3))
b <- raster(matrix(c(12,12,12,
NA,12,12,
40,12,13),nrow=3))
c <- raster(matrix(c(13,9,13,
NA,13,13,
13,NA,13),nrow=3))
d <- raster(matrix(c(10,10,10,
NA,10,10,
10,10,10),nrow=3))
corr_max <- raster(matrix(c(13,12,13,
NA,13,13,
40,12,13),nrow=3))
stack <- stack(a,b,c,d)
which.max2 <- function(x, ...)which.max(x)
# stackApply method
max_v_sApp <- stackApply(stack,rep(1,4),which.max2,na.rm=NULL)
# calc method
max_v_calc <- calc(stack,which.max)
うまくいけば、これで十分な情報が得られます。
アップデート:
これはうまくいくかもしれません...今テストしています:
which.max2 <- function(x, ...){
max_idx <- which.max(x) # Get the max
ifelse(length(max_idx)==0,return(NA),return(max_idx))
}