Hier ist mein R-Code. Die Funktionen sind definiert als:
f <- function(x, T) {
10 * sin(0.3 * x) * sin(1.3 * x ^ 2) + 0.001 * x ^ 3 + 0.2 * x + 80
}
g <- function(x, T, f=f) {
exp(-f(x) / T)
}
test <- function(g=g, T=1) {
g(1, T)
}
Der laufende Fehler ist:
> test ()
Fehler in test ():
Versprechen wird bereits evaluiert: rekursive Standardargumentreferenz oder frühere Probleme?
Wenn ich die Definition von f
in die von g
ersetze, verschwindet der Fehler.
Ich habe mich gefragt, was der Fehler war. Wie kann man das korrigieren, wenn man die Definition von nicht f
durch die von ersetzt g
? Vielen Dank!
Aktualisieren:
Vielen Dank! Zwei Fragen:
(1) Wenn die Funktion test
weiter ein Argument für nimmt f
, werden Sie so etwas hinzufügen test <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) }
? In Fällen mit mehr Rekursionen ist es eine gute und sichere Praxis, mehr hinzuzufügen . ?
(2) Wenn f
es sich beispielsweise um ein Nichtfunktionsargument handelt g <- function(x, T, f=f){ exp(-f*x/T) }
und test <- function(g.=g, T=1, f=f){ g.(1,T, f=f.) }
die Verwendung des gleichen Namens sowohl für formale als auch für tatsächliche Nichtfunktionsargumente eine gute und sichere Praxis ist, kann dies zu potenziellen Problemen führen?