栅格堆栈像元中的底值到像元值 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")
我正在努力处理栅格堆栈的底单元值。这里有一些示例数据:
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")