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 fof g, to błąd zniknie.
Zastanawiałem się, co to za błąd? Jak go poprawić, jeśli nie zastępują definicji fw tym z g? Dzięki!
Aktualizacja:
Dzięki! Dwa pytania:
(1) jeśli funkcja testprzyjmuje 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 fjest 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?