Вот мой 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()
Ошибка в тесте():
обещание уже оценивается: рекурсивный аргумент аргумента по умолчанию или более ранние проблемы?
Если я подстановлю определение f
в значение g
, ошибка исчезнет.
Мне было интересно, что это за ошибка? Как исправить это, если не подставить определение f
в значение g
? Спасибо!
Update:
Спасибо! Два вопроса:
(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.) }
, будет использовать одно и то же имя для формальных и фактических нефункциональных аргументов - хорошая и безопасная практика или может вызвать некоторые потенциальные проблемы?