这是我的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.) }
,将对正式和实际的非函数参数使用相同的名称是一种好的安全做法,还是可能引起一些潜在的麻烦?