2017-06-28 1 views
0

Ich möchte Indexnummer verwenden, um den Ausführungsfortschritt in apply Funktion zu verfolgen. Hier ist mein Versuch und es funktioniert nicht (jedes Mal wenn wir die Funktion anwenden, wird der Index mit 1.0 gestartet). Wie kann ich das beheben, d. H. Globale Variablen in apply Funktion ändern?Wie kann ich den Variablenwert in der R Apply-Funktion ändern?

> idx=1 

> f<-function(x){ 
+ idx=idx+1 
+ print(c("current progress", idx)) 
+ return(1) 
+ } 

> res=sapply(1:3,f) 
[1] "current progress" "2"    
[1] "current progress" "2"    
[1] "current progress" "2" 
+0

Wenn Sie wie im Beispiel entlang eines numerischen Vektors '1: 3' iterieren, warum nicht direkt verwenden? – lmo

Antwort

1

Dies liegt daran, dass die Variablenzuweisung innerhalb einer Funktion verloren geht, wenn die Funktion beendet wird. Wie Zheyuan Li zu Recht betont hat, kommt die Zuweisung an die globale Umgebung dazu, dass auf diese Weise die Zuweisung bei der Beendigung nicht verloren geht.

Ich bevorzuge die assign() Funktion, wie Sie explizit bestimmen können, wo die Variable gespeichert ist (nicht immer der Fall mit <<-).

idx=1 

f <- function(x){ 

    assign('idx', idx+1, envir = globalenv()) 
    print(c("current progress", idx)) 
    return(1) 

} 

res=sapply(1:3,f) 
Verwandte Themen