Ordnung stackies,Funktion Betreiber und Umgebungen
Ich habe Advanced R Lesen und haben wirklich fand es hilfreich. Ich bin an einem Punkt, wo ich nicht wirklich verstehen, R Verhalten im Beispiel:
dot_every <- function(n, f) {
i <- 1
function(...) {
if (i %% n == 0) cat(".")
i <<- i + 1
f(...)
}
}
So, hier ist die Idee, dass wir jede n-te Iteration der Funktion einer Zeit anzuzeigen. Was ich nicht verstehe ist, wie der Wert von i durch mehrere Aufrufe von dot_every
in einem funktionalen verwaltet wird. Ich verstehe, dass <<-
bewegt durch Umgebungen nach etwas mit dem Namen i
und ersetzt dann mit i+1
. Ich würde das in etwa so gedacht habe:
x <- lapply(1:20, dot_every(10, runif))
würde Müll sammeln, dass i
für jede Iteration in lapply
und somit nie erhöhen. Meine Intuition ist, dass es so funktionieren würde:
for(i in 1:20){
dot_every(10, runif)(i)
}
Welche dot_every
zu sein scheint zu rufen, Müll zu sammeln i
und damit nichts angezeigt wird. Was ist anders in diesem Fall, wenn das Funktionale als die For-Schleife verwendet wird?
Danke für Ihre Hilfe!
Ahhh ... das meist sinnvoll. Also wird die Umgebung, die 'dot_every' erstellt, nicht geschlossen, bis' lapply' ausgeführt wird? Das würde für mich einen Sinn ergeben, wie jeder Aufruf "i" beeinflussen kann. – svenhalvorson
Jeder Aufruf von 'dot_every()' erzeugt einen neuen Abschluss, der solange existiert, bis die von 'dot_every()' erzeugte Funktion den Gültigkeitsbereich verlässt. –
Ausgezeichnet, vielen Dank! – svenhalvorson