Oto mój kod R. Funkcje są zdefiniowane jako:
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)
}
Błąd działania to:
> test ()
Błąd w test ():
obietnica już w trakcie oceny: rekurencyjne odwołanie do domyślnego argumentu lub wcześniejsze problemy?
Jeśli zastąpię definicję w definicji f
of g
, to błąd zniknie.
Zastanawiałem się, co to za błąd? Jak go poprawić, jeśli nie zastępują definicji f
w tym z g
? Dzięki!
Aktualizacja:
Dzięki! Dwa pytania:
(1) jeśli funkcja test
przyjmuje argument za f
, czy dodasz coś takiego test <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) }
? W przypadkach z większą liczbą rekurencji dobrym i bezpiecznym sposobem jest dodawanie kolejnych . ?
(2) jeśli na przykład f
jest argumentem niefunkcjonalnym g <- function(x, T, f=f){ exp(-f*x/T) }
i test <- function(g.=g, T=1, f=f){ g.(1,T, f=f.) }
czy używanie tej samej nazwy zarówno dla formalnych, jak i faktycznych argumentów niefunkcjonalnych będzie dobrą i bezpieczną praktyką, czy może spowodować potencjalne problemy?