【发布时间】:2015-08-19 15:55:19
【问题描述】:
我正在编写一个程序,在该程序中我需要一个函数来调用预先确定的函数,该函数可能会再次调用之前确定的函数,依此类推。但是,我发现自己无法在 R 中实现这一点。
这是我正在尝试做的一个最小示例:
functions <- list()
functions[[1]] <- function(x){
x
}
for (i in 2:10)
{
functions[[i]] <- function(x){
functions[[i-1]](x) + x
}
}
所以在运行这个脚本之后,我想要发生的是,当我调用functions[[10]](1) 时,R 确定了函数在第 9 期的值,为此它需要函数在第 8 期的值依此类推并添加输入。 (很明显,输出应该是 10)。
问题是当我这样做时,函数会无限调用自身。列表如下所示:
[[1]]
function (x)
{
x
}
[[2]]
function (x)
{
functions[[i - 1]](x) + x
}
[[3]]
function (x)
{
functions[[i - 1]](x) + x
}
(...)
所以当我调用functions[[10]](x) 时,它的计算结果为functions[[9]](x) + x,但functions[[9]] 然后不断地一遍又一遍地调用自己。
我能做些什么来强制 R 将 i - 1 的值写入列表的每个元素,使其如下所示?
[[1]]
function (x)
{
x
}
[[2]]
function (x)
{
functions[[1]](x) + x
}
[[3]]
function (x)
{
functions[[2]](x) + x
}
(...)
或者有没有其他方法可以做我想做的事情?
(显然,在上面给出的示例中,我可以求和,但在我试图在这里模拟的应用程序中,这是不可能的,除了让每个函数调用之外,我想不出另一种方法来做到这一点前面的那个)。
【问题讨论】:
-
看看this post也许,按照公认的解决方案你可以试试
functions[[i]] <- eval(parse(text=paste0("function(x){functions[[",i-1,"]](x) + x}"))) -
查看
formals( f )函数。我将举例说明我的意思
标签: r