Ich habe eine einfache Schleife erstellt, um die Effizienz einiger simulierter Daten zu berechnen. Es führt sehr gut, während als Schleife:falsche Ausgabe von For-Schleife innerhalb der Funktion
NSE_cal <- NULL
for(i in 1:6) {
Qobs <- flowSummary_NSE1[[i]][[3]]
Qsim <- flowSummary_NSE1[[i]][[1]]
object_cal <- NSEsums("NSE")
NSE_cal <- c(NSE_cal, object_cal)
}
#NSE_cal
#[1] 0.8466699 0.7577019 0.8128499 0.9163561 0.7868013 0.8462228
Allerdings möchte ich diese Schleife gelten ein paar Mal - ich das Objekt flowSummary_NSE#
verändern müssen, und ich habe vier verschiedene Transformationsarten anzuwenden. Als Anfang habe ich die Schleife in einer Funktion, mit nur transformation
benötigen angegeben werden, etwa so:
badFunction <- function(transformation){
NSE_cal <- NULL
for(i in 1:6) {
Qobs <- flowSummary_NSE1[[i]][[3]]
Qsim <- flowSummary_NSE1[[i]][[1]]
object_cal <- NSEsums(transformation)
NSE_cal <- c(NSE_cal, object_cal)
}
print(NSE_cal)
}
badFunction("NSE")
# [1] 0.8462228 0.8462228 0.8462228 0.8462228 0.8462228 0.8462228
Die Funktion hat genau die gleiche Informationseingabe wie in dem for-Schleife auf seinem eigenen, mit der Ausnahme, für aus irgendeinem Grund gibt es den gleichen Wert für jeden Fall von i
aus.
Es ist klar, dass ich etwas falsch gemacht habe. Aber soweit ich sehen kann, muss es etwas Einfaches sein, das in der Funktion selbst enthalten ist. Allerdings einhüllen es ein Fehler an anderer Stelle ist, habe ich den Code angebracht, die die erforderlichen Daten und abhängigen Funktionen (here)
Jede Hilfe viel
Danke, dass Sie sich die Zeit nehmen in den abhängigen Materialien suchen ; Ich war mir sicher, dass ich schon jeden einzelnen Teil durchgegangen war. Die Lösung scheint jetzt ziemlich offensichtlich! Ich füge das meiner Liste von Dingen hinzu, um das nächste Mal zu versuchen, dass eine for-Schleife in einer Funktion nicht funktioniert – Visser
Ihr sehr willkommen. Nur zur Erinnerung, Ihre schlechte Funktion würde nicht 0.846 .. sechs Mal ausgegeben haben, wenn Sie die globale Umgebung vor dem Ausführen gelöscht haben. Es zog Qobs und Qsim von dort, daher jedes Mal den gleichen Wert. –
Das macht Sinn! Ich habe immer die einfache Schleife davor ausgeführt, damit ich bestätigen konnte, dass die Ausgabe korrekt war. Ich füge das zur Liste der Dinge hinzu, die ich beim nächsten Mal ausprobieren sollte. Danke für Ihre hervorragende Beratung – Visser