計算()創建一個邏輯函數,「樂趣」,計算幾個參數,即:SOS,EOS,LOS,SPUDOY和P_Tamplitude,使用.envi光柵文件。最終,我想爲每個參數生成單獨的圖。輸入一個函數,它返回一個列表到R中
我用鈣()對Data_value執行 「好玩」。它在「有趣」只返回一個變量時起作用。但是,當「fun」返回上述所有五個參數時,calc()失敗 - 這是一個列表。
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方法(下,X): 值必須是數字,整數,邏輯或因子
plot(equation)
任何形式的幫助,將不勝感激。謝謝!
FWIW,'fun'不返回一個列表,但一個載體。你是否考慮過''calc'的'forceapply = TRUE'參數? –
我認爲矢量是一個列表。這在R.中是一種不同的術語。(http://www.r-tutor.com/r-introduction/vector)。 – Candice
@RomanLuštrik我拿起R.原諒我,如果我錯了,但我覺得矢量是一個列表。這在R.中是一種不同的術語。(http://www.r-tutor.com/r-introduction/vector)。 我嘗試使用在計算值()forceapply = TRUE,我得到了同樣的錯誤,以及。我也在考慮使用sapply,但我認爲它不適用於柵格數據。我也在想也許我可以用矩陣而不是列表返回值。我想生成5層數據(SOS,EOS,LOS,SPUDOY和P_TAmplitude),並執行計算值()。我認爲R不知道數據應該如何存儲。思考? – Candice