Ich erstelle eine logistische Funktion, "Spaß", die mehrere Parameter berechnet, dh: SOS, EOS, LOS, SPUDOY und P_Tamplitude, mit einer .envi-Raster-Datei . Letztendlich möchte ich separate Diagramme für jeden Parameter erstellen.Eingabe einer Funktion, die eine Liste in calc() zurückliefert R
Ich benutze Calc(), um "Spaß" auf Data_value durchzuführen. Es funktioniert, wenn "Spaß" nur eine Variable zurückgibt. Calc() schlägt jedoch fehl, wenn "Spaß" alle fünf oben erwähnten Parameter zurückgibt - was eine Liste ist.
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)
Nach dem Ausführen des obigen Befehls wird ein Fehler angezeigt. Fehler in setValues (out, x): Werte müssen numerisch, integer, logische oder Faktor sein
plot(equation)
Jede Art von Hilfe würde geschätzt. Vielen Dank!
FWIW, 'fun' kehrt nicht eine Liste, sondern ein Vektor. Haben Sie das Argument "forceapply = TRUE" von "? Calc" berücksichtigt? –
Ich denke, Vektor ist eine Liste. Es ist nur ein anderer Jargon in R. (http://www.r-tutor.com/r-introduction/vector). – Candice
@ RomanLuštrik Ich habe gerade R. abgeholt. Verzeihen Sie, wenn ich falsch liege, aber ich denke, Vektor ist eine Liste. Es ist nur ein anderer Jargon in R. (http://www.r-tutor.com/r-introduction/vector). Ich versuchte mit Forceapply = TRUE in Calc(), ich habe den gleichen Fehler als auch. Ich denke auch über die Verwendung von Sapply, aber ich denke nicht, dass es für Raster-Daten funktioniert. Ich denke auch, dass ich vielleicht die Werte in Matrix anstelle von einer Liste zurückgeben kann. Ich möchte 5 Schichten von Daten erzeugen (SOS, EOS, LOS, SPUDOY und P_TAmplitude) und calc() ausführen. Ich denke R versteht nicht, wie die Daten gespeichert werden sollen. Gedanken? – Candice