【问题标题】:replace a for loop, but with which apply statement?替换 for 循环,但使用哪个 apply 语句?
【发布时间】:2014-01-21 15:23:23
【问题描述】:

我正在尝试用旧代码中的 apply 语句替换一些非常复杂的 for 循环。这是一个小例子,以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]

【问题讨论】:

    标签: r for-loop apply


    【解决方案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 个小拼写错误,数组 -> 数组,但另一件事是需要在 len-2len-4 周围加上括号,如 (len-2)(len-4)
    • 绝对是的。谢谢。
    • 两个不同长度的向量如何相加?
    【解决方案2】:

    这是一种方法:

    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
    

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多