に、私はいくつかのパラメータ、すなわち計算ロジスティック関数、「楽しい」、作成します。.enviラスターファイルを使用して、SOS、EOS、LOS、SPUDOY、およびP_Tamplitudeを。最終的には、各パラメータごとに別々のプロットを生成したいと考えています。)(計算値にリストを返す関数を入力するR
私はDATA_VALUEの "楽しさ" を実行する計算値()を使用します。 "fun"が1つの変数だけを返すときに機能します。しかし、fun()は前述の5つのパラメータすべてを返すときに失敗します。これはリストです。
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)
因子でなければなりません。ありがとうございました!
に
:あなたのケースでは、次の行を変更してみ
しかし、1と5
です。 '?calc'から' forceapply = TRUE'引数を考えましたか? –私はベクトルがリストだと思います。それはRのちょっとした語彙です(http://www.r-tutor.com/r-introduction/vector)。 – Candice
はRomanLuš[email protected]私はちょうど私が間違っている場合はR.が私を許し拾ったが、私はベクトルがリストであると思います。それはRのちょっとした語彙です(http://www.r-tutor.com/r-introduction/vector)。 I)は、(計算値にforceapply = TRUE使用してみました、私も同じエラーを得ました。私はサプライを使用することも考えていますが、ラスターデータでは機能しないと思います。私はおそらく、リストの代わりに行列の値を返すこともできると考えています。私はデータ(SOS、EOS、LOS、SPUDOYとP_TAmplitude)の5層を生成し、CALCを実行したいと思います()。私はRがデータの保存方法を理解していないと思う。思考? – Candice