最佳答案
这是我的 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)
}
运行错误是:
> 测试()
测试错误() :
已经在评估中的承诺: 递归缺省参数引用还是早期的问题?
如果我将 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.) }
,在形式和实际的非函数参数中使用相同的名称是否是一个好的、安全的做法,或者可能会引起一些潜在的麻烦?