诺言已经在评估:recursion默认参数引用或更早的问题?

这是我的R代码。 这些function被定义为:

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()中的错误:
诺言已经在评估:recursion默认参数引用或更早的问题?

如果我用f的定义代替f ,那么错误就会消失。

我想知道错误是什么? 如果不用g的定义代替g ,怎么改正呢? 谢谢!


更新:

谢谢! 两个问题:

(1)如果函数test还需要f一个参数,你会添加一些类似于test <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) } ? 在更多recursion的情况下,增加更多是否是一个好的和安全的做法

(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.) } ,会用同一个名字来表示forms上和实际上的非function性的论点,这是一个好的和安全的做法,否则可能会导致一些潜在的麻烦?

formsx=xforms参数会导致这种情况。 消除它们发生的两个实例我们得到:

 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) { ## 1. note f. exp(-f.(x)/T) } test<- function(g. = g, T = 1) { ## 2. note gg(1,T) } test() ## [1] 8.560335e-37