Вот мой код R. Функции определены как:
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)
}
Текущая ошибка:
> test ()
Ошибка в test ():
обещание уже оценивается: рекурсивная ссылка на аргумент по умолчанию или более ранние проблемы?
Если я заменяю определение f
в том , что из g
, то ошибка уходит.
Мне было интересно, в чем была ошибка? Как это исправить , если не подменять определение f
в том , что из g
? Благодарность!
Обновить:
Благодарность! Два вопроса:
(1) если функция test
дополнительно принимает аргумент для f
, вы добавите что-нибудь вроде test <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) }
? В случаях с большим количеством рекурсий это хорошая и безопасная практика . ?
(2) если f
это аргумент, не являющийся функцией, например, g <- function(x, T, f=f){ exp(-f*x/T) }
и test <- function(g.=g, T=1, f=f){ g.(1,T, f=f.) }
будет ли использование одного и того же имени как для формальных, так и для фактических нефункциональных аргументов хорошей и безопасной практикой, или это может вызвать некоторые потенциальные проблемы?