我正在编写一个程序,其中我需要一个函数来调用事先确定的函数,这可能再次调用在它自己之前确定的函数,依此类推。但是,我发现自己无法在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
}
(...)
或者我还有其他办法可以做我想做的事吗?
(显然,在上面给出的例子中,我可以总结,但在我试图在这里模拟的应用程序中,这是不可能的,我不能想到另一种方法来做到这一点,而不是每个函数调用之前的那个)。
答案 0 :(得分:1)
你去吧
functions <- list()
functions[[1]] <- function(x){
x
}
for (i in 2:10)
{
functions[[i]] <- function(x,i){
functions[[i-1]](x) + x
}
formals(functions[[i]])$i <- i
}
functions[[10]](5)
# 50