替换for循环,但使用apply语句?

时间:2014-01-21 15:23:24

标签: r for-loop apply

我正在尝试使用旧版旧代码中的apply语句替换一些非常复杂的 for 循环。这是循环的一个小例子

old.array <- c(15:24)
new.array <- old.array

for (i in 4:length(old.array)) {
    new.array[i] <- old.array[i-2] + old.array[i-3]
}

使用apply(或plyr)函数替换此方法的任何建议都会对您有所帮助。对我来说问题来自于公式中的 [i -2] 等占位符。

2 个答案:

答案 0 :(得分:1)

无需for循环或任何apply(...)函数。

len <- length(old.array)
new.array <- old.array
new.array[4:len] <- old.array[2:(len-2)] + old.array[1:(len-3)]

@ SvenHohenStein的评论如下是正确的。在上面的修订代码中,向量的长度相同(len-3)。

答案 1 :(得分:1)

这是一种方法:

new.array <- c(old.array[1:3], 
               filter(head(old.array, -2), c(1, 1), sides = 1)[-1])
# [1] 15 16 17 31 33 35 37 39 41 43