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