r - promise 已在评估中 : recursive default argument reference or earlier problems?

标签 r

这是我的 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()
Error in test() :
promise already under evaluation: recursive default argument reference or earlier problems?

如果我替换 f 的定义在 g 中,然后错误就消失了。

我想知道错误是什么?如果不替换f的定义如何纠正它在 g 中?谢谢!

<小时/>

更新:

谢谢!两个问题:

(1) if 函数 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.) } ,对形式和实际的非功能参数使用相同的名称是一种良好且安全的做法还是可能会导致一些潜在的麻烦?

最佳答案

x=x 形式的形式参数会导致这种情况。消除它们发生的两个实例,我们得到以下结果。 (您不能在函数定义的形式参数中使用 x=x 的原因是,它首先在函数本身中查找默认参数,因此使用该形式告诉它使用自身作为默认值,但尚未定义,因此没有意义,我们会收到错误。)

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 g.
   g.(1,T) 
}
 
test()
## [1] 8.560335e-37

关于r - promise 已在评估中 : recursive default argument reference or earlier problems?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4357101/

相关文章:

r 数据帧的下标,条件值由向量表示

r - Kable 不再打印字幕

Python Pandas groupby 并使用分组计算 ala dplyr 改变一个新列

r - 如何按组回归线性模型并且仅改变斜率但保持截距相同?

r - 您如何处理包内部的 R 数据?

r - 在 R 中将时间序列小时数扩展为秒数

python - 计算互相关函数?

r - 方差分析中的对比

r - 在给定另一列中相应的连续值相等的情况下,在一列中查找值的中位数

r - 在 R 中使用需要四个向量的函数进行迭代