我创建了一个逻辑函数" fun",它使用.envi光栅文件计算几个参数,即:SOS,EOS,LOS,SPUDOY和P_Tamplitude。最后,我想为每个参数生成单独的图。
我使用calc()来执行" fun"在Data_value上。它很有用"有趣"只返回一个变量。但是,当(" fun"返回前面提到的所有五个参数 - 这是一个列表。
new <- stack("1982_test.envi")
new[new<=-1000]<-0
Data_value<-new/10000
DOY<-(1:nlayers(new)*15)
fun<- function(x) { if (all(is.na(x[1]))) { return (NA) } else {
fitForThisData <-nls(x~ a+((b/(1+ exp(-c*(DOY-e))))- (g/(1+ exp(-d*(DOY-
f))))), alg="port",start=list(a=0.1,b=1,g=1,c=0.04,d=0.04,e=112,f=218),
lower=list(a=0,b=0.3,g=0.3,c=-1,d=-1,e=20,f=100),
upper=list(a=0.4,b=2,g=2,c=1,d=1,e=230,f=365),
control=nls.control(maxiter=2000, tol = 1e-15, minFactor = 1/1024,
warnOnly=TRUE))
SOS<-(coef(fitForThisData)[6] -(4.562/(2*coef(fitForThisData)[4])))
EOS<-(coef(fitForThisData)[7] -(4.562/(2*coef(fitForThisData)[5])))
LOS<-(EOS-SOS)
SPUDOY<-(1.317*((-1/coef(fitForThisData)[4])+ coef(fitForThisData)[6]))
P_TAmplitude<-(SPUDOY-SOS)
return (c(SOS,EOS,LOS,SPUDOY,P_TAmplitude))
}
}
equation<-calc(Data_value,fun)
运行上面的命令后,它表示存在错误。 setValues(out,x)出错: 值必须是数字,整数,逻辑或因子
plot(equation)
任何形式的帮助将不胜感激。谢谢!
答案 0 :(得分:0)
我尝试使用一些示例数据代码,除非我不插入NA值,否则它实际上有效。 看起来您返回的NA值的数量存在问题。 发生NA的情况下的长度需要与不发生NA时的长度相同。在你的情况下,它是1和5。
尝试更改以下行:
return(NA)
到
return(rep(NA,5))