我正在尝试使用旧版旧代码中的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] 等占位符。
答案 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