Ось мій 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? Дякую!
Оновлення:
Дякую! Два питання:
(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.) }буде використання одного і того ж імені як для формальних, так і для фактичних нефункціональних аргументів хорошою та безпечною практикою, або це може спричинити певні проблеми?