Ich hatte eine Funktion in R (onestep
unten), die als Argument einen Vektor v
nahm und einen neuen Vektor v
als Ausgabe, die eine Funktion des Eingabevektors war. I iteriert dann diese Funktion niter
Zeiten und hielt die Ausgangsvektoren jeder Iteration (die die gleiche Länge haben nicht alle sind und 0 Länge am Ende mit gelegentlich auch kann) in einer anderen Funktion iterate
wie folgt (minimal Beispiel):Julia - Äquivalent der rekursiven Sapply-Funktion in R
onestep = function (v) c(v,2*v)
iterate = function (v, niter) sapply(1:niter, function (iter) {v <<- onestep(v)
return(v) })
Beispiel:
v=c(1,2,3)
iterate(v,3)
[[1]]
[1] 1 2 3 2 4 6
[[2]]
[1] 1 2 3 2 4 6 2 4 6 4 8 12
[[3]]
[1] 1 2 3 2 4 6 2 4 6 4 8 12 2 4 6 4 8 12 4 8 12 8 16 24
ich habe mich gefragt, was eine kompakte und idiomatische Weg wäre, eine solche rekursive Funktion zu tun, die alle Zwischenergebnisse in Julia zurückkehrt? Irgendwelche Gedanken? (Entschuldigt, wenn dies trivial ist, aber ich bin neu in Julia)
Vielen Dank - das ist perfekt für mich! Das Sapply mit v als globale Variable war sowieso ein bisschen zwielichtig :-) Vielen Dank für Ihre freundliche Hilfe! –
@TomWenseleers Sicher Sache. Wenn Sie von R nach Julia wechseln, werden Sie im Allgemeinen feststellen, dass Sie viele Dinge auf der Basis von Schleifen aller Arten machen, was im Allgemeinen schneller ist als die Vektorisierung. So werden Dinge wie "Sapply" in vielen Fällen nicht so sehr in Ihren Kopf kommen. Wenn Sie Performance suchen und aus einem R-Hintergrund kommen, empfehle ich Ihnen, die Julia-Performance-Guides zu lesen und dabei besonders auf das Casting in Ihren Funktionen zu achten (was ich hier zur Vereinfachung der Darstellung nicht getan habe). –