【发布时间】:2012-09-17 02:37:04
【问题描述】:
2012 年 9 月 17 日更新
这是一段使用独立数据的代码,可以重现我的问题:
请记住,我拥有的实际数据维度非常庞大...
尺寸:3105、7025、21812625、12(nrow、ncol、ncell、nlayers)
我需要的是每行的最大值索引,列在图层上。所有 NA 都应该返回 NA 并且多个 max 副本应该返回第一个 max 索引(或其他,必须一致)
# 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))
}
【问题讨论】:
-
我不认为你关于为什么它不起作用的结论是正确的。 ?which.max 说:“丢失和 NaN 值被丢弃。”您能否使用 dput() 提供该对象的一小部分?
-
哇。来吧。那是一个网页,而不是一个 FTP 服务器。您应该提供用于创建此对象的代码!我有一个解决方案,但无法用这种模糊程度进行测试。
-
请提供reproducible example,我们可以快速运行以测试您的问题的问题和解决方案。
-
所有,今晚我将尝试添加更多信息。我将把我尝试过的不同方法整合在一起,并产生错误。感谢您迄今为止的帮助。