繁体   English   中英

栅格堆栈像元中的底值到像元值的特定分位数r

[英]Floor values in raster stack cell to certain quantile of cell values r

我正在努力处理栅格堆栈的地板像元值。 下面是一些示例数据:

library(raster)

r <- raster(ncol=10, nrow=10)
s <- stack(lapply(1:365, function(i) setValues(r, runif(100, 0, 1))))
# adding NAs
s[[2]][sample(100, 25, TRUE)] <- NA
s[sample(100, 25, TRUE)] <- NA

我有一整年的时间序列栅格堆栈。 在时间序列中,某些像元已完全设置为NA以及某些单个值。 我正在尝试将每个单元格中的值下限为该单元格的较低.025分位数。 这是我的功能达到的程度:

f <- function(i) {
  v_q <- quantile(i,probs = .025 ,na.rm=TRUE)
  if (length(v_q) > 0) {
    if(i[v_q] < v_q) {
      i[v_q] <- v_q
    }
    i
  }
  i  
}

x <- calc(s, fun = f)

当我将其应用于calc我不断收到以下错误:

Error in .calcTest(x[1:5], fun, na.rm, forcefun, forceapply) : 
  cannot use this function

有任何想法吗?

不确定该错误,但是您的函数看起来有些奇怪。

首先,让我们添加一个随机种子以提高可重复性:

library(raster)

r <- raster(ncol=10, nrow=10)
set.seed(42)
s <- stack(lapply(1:365, function(i) setValues(r, runif(100, 0, 1))))
# adding NAs
s[[2]][sample(100, 25, TRUE)] <- NA
s[sample(100, 25, TRUE)] <- NA

堆栈或积木上的calc基本上适用于跨层的值向量。

所以这应该工作:

f <- function(i) {
  q <- quantile(i,probs = .025 ,na.rm=TRUE)

  i[i<q] <- q
  i

}

x <- calc(s,fun=f)

并测试:

q <- calc(s,fun = function(x) quantile(x,0.025,na.rm=T))

par(mfrow=c(1,2))

plot(s[[1]] < q,main="s[[1]] < q")
plot(x[[1]] == q,main="x[[1]] == q")

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM