R中的递归函数应用于向量

时间:2015-11-25 16:34:44

标签: r recursion

我想知道最有效的(想想代码和速度,以防我在非常大的向量或对象上运行它)来计算向量上的递归函数。 (为了计算S [i],我们只需要S [k]直到k <=(i-1)和V [k],其中k <= i)

一个简单的例子将给出长度为N的num向量v,以返回一个向量 S其中S [i]是v。

的前i个元素的总和

在这种特殊情况下,(for)循环非常难看......(已编辑)因此效率不高 做像

这样的事情
myfun <- function(i){sum(length_table[1:i])}
        S <- sapply(v,myfun))
由于许多不必要的计算,

并不好......

有什么建议吗?

编辑: 对我而言,迭代和递归之间没有太大的区别。 我不知道在这种特殊情况下解决问题的cumsum函数。

好吧现在让我们有一个更一般的情况,我们有一个(num)函数f,它接受两个(num)参数,所以f(x,y)也是一个num值。我们也需要一个数字“种子”。 给定长度为N的num矢量v,

我想构造由

定义的向量U.
U[1] = f(v[1],seed)
U[2] = f(v[2],U[1])
U[3] = f(v[3],U[2])...

U[N] = f(v[N],U[N-1])

在没有循环的情况下有一种很好的有效方法吗?

1 个答案:

答案 0 :(得分:2)

以下是两种在R中实现此功能的方法(虽然Reduce似乎更优雅,但我的经验是它更容易出现(我的)混淆):

> y <- numeric(); y[1] <- 1; for( i in 2:10 ){ y[i] <- 3+y[i-1]*2}
> y
 [1]    1    5   13   29   61  125  253  509 1021 2045

> Reduce( function(x,y){ y= 3+ x*2}, 1:10, accumulate=TRUE)
 [1]    1    5   13   29   61  125  253  509 1021 2045