这是我的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?

如果我用g的定义替换f的定义,那么错误就消失了.

我想知道错误是什么?如果不将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.) },那么在形式和实际的非函数参数中使用相同的名称是一种良好且安全的做法,还是可能会导致一些潜在的问题?

推荐答案

形式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相关问答推荐

for循环和if else在R中

从字符载体创建函数参数

按崩溃类别分类的指数

寻找图片边缘

Highcharter多次钻取不起作用,使用不同方法

用相同方法得到不同函数的ROC最优截断值

我如何才能找到FAMILY=POISSON(LINK=&Q;LOG&Q;)中的模型预测指定值的日期?

即使硬币没有被抛出,也要保持对其的跟踪

如何删除最后一个可操作对象

Ggplot2中geom_tile的动态zoom

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

将向量元素重新排序为R中的第二个

减go R中列表的所有唯一元素对

有没有办法一次粘贴所有列

将多个列合并为一个列的有效方法是什么?

自定义交互作用图的标签

我需要使用ggplot2制作堆叠条形图

对R中的列表列执行ROW Mean操作

用满足特定列匹配的另一行替换NA行

R预测包如何处理ARIMA(Auto.arima函数)中的缺失值