Here is my R code. The functions are defined as:
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)
}
The running error is:
> test()
Error in test() :
promise already under evaluation: recursive default argument reference or earlier problems?
If I substitute the definition of f
in that of g
, then the error goes away.
I was wondering what the error was? How to correct it if don't substitute the definition of f
in that of g
? Thanks!
Update:
Thanks! Two questions:
(1) if function test
further takes an argument for f
, will you add something like test <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) }
? In cases with more recursions, is it a good and safe practice adding more .?
(2) if f
is a non-function argument, for example g <- function(x, T, f=f){ exp(-f*x/T) }
and test <- function(g.=g, T=1, f=f){ g.(1,T, f=f.) }
, will using the same name for both formal and actual non-functional arguments a good and safe practice or it may cause some potential trouble?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…