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



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

一个简单的例子是给出一个长度为N的num向量v,以返回一个向量其中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值。我们也需要一个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])

有没有一种很好的有效方法可以在不循环的情况下做到这一点?

以下是在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

最新更新