【发布时间】:2020-06-17 08:42:30
【问题描述】:
我正在计算此study/scientific publication 的最大气候缺水量,使用作者发布的 Rcode 以及可用的研究here
这是一个非常简单的代码,其中的输入是我从 Terraclimate 产品下载的月降雨量栅格。从每个降雨栅格(月)中减去 100 毫米/月(蒸散量)后,会创建一个堆栈,并在 calc() 中使用以下函数
wd = stack(month.rainfall)-100 # 100 is the evapotranspiration in mm/month
# MCWD Function
mcwd.f = function(x){
result= as.numeric(x)
for(i in 1:length(result)){
wdn = result[i]
wdn1 = result[i-1]
if(i==1){
if(wdn>0){ result[i]=0}
else{result[i]=wdn}
}
if(i!=1){
cwd = wdn1+wdn
if( cwd < 0){ result[i]=cwd}
else{result[i]=0}
}
}
return(result)
}
# Applying the Function
cwd = calc(wd, fun = mcwd.f)
但是,在我运行从 cwd 开始的行之后,我得到了错误 .calcTest(x[1:5], fun, na.rm, forcefun, forceapply) 中的错误: 无法使用此功能
为什么会出现这个错误?我该如何解决?
我查看了类似的帖子-1、2,并使用了 na.rm=TRUE 等,但我仍然遇到相同的错误。我还看到一些帖子说 calc() 不是很好,但我不知道如何解决这个问题或找到替代方案,因为我正在使用我正在复制的研究作者发布的代码。
编辑-我使用了一个包含 100 个随机数(没有 NA)的向量来测试 mcwd.f 函数并且它可以工作。所以我认为这与拥有 NA 像素有关,如果我在 calc() 中使用 na.rm=TRUE,我认为应该可以解决这个问题,但它并没有解决它。
【问题讨论】:
-
@Spacedman 你能帮忙吗?
-
@Jeffrey Evans?