【问题标题】:For loop with if statements带有 if 语句的 For 循环
【发布时间】:2014-01-21 14:03:12
【问题描述】:

我正在尝试在 R 中编写指标变量,是的,我不应该使用 for 循环

lch$clickIndicator <- rep(0, nrow(lch))
for (i in length(lch$clickIndicator)) {if (lch$PREV_CLICKS[i] > 0 || lch$IS_CLICK[i] == 1) {
  lch$clickIndicator = 1
} else {
  lch$clickIndicator = 0
}}


max(lch$clickIndicator)

不幸的是,max() 函数在运行循环后返回 0,我尝试了此代码的各种排列,包括直接引用每个 lch$clickIndicator[i] 元素,但没有任何效果。我显然错过了一些简单的东西。

谁能建议如何让这个 for 循环工作,甚至更好,如果有一种简单的方法来矢量化这段代码?

【问题讨论】:

    标签: r loops vectorization


    【解决方案1】:

    您忘记 (a) 为输出变量编制索引。使用lch$clickIndicator[i] 而不是lch$clickIndicator。另一个问题是(b)for (i in length(lch$clickIndicator))。你想要for (i in 1:length(lch$clickIndicator))。否则,函数仅应用于最后一行。

    lch$clickIndicator <- rep(0, nrow(lch))
    for (i in 1:length(lch$clickIndicator)) {
      if (lch$PREV_CLICKS[i] > 0 || lch$IS_CLICK[i] == 1) {
        lch$clickIndicator[i] = 1
      } else {
        lch$clickIndicator[i] = 0
      }
    }
    

    此任务不需要循环,但可以使用矢量化操作:

    lch$clickIndicator <- as.integer(lch$PREV_CLICKS > 0 | lch$IS_CLICK == 1)
    

    【讨论】:

    • @SimonHayward 查看更新。还有一个问题。
    • 感谢您的更新。我一直在学习 Python,但我的范围很混乱!非常感谢您提供了一个很好、明确的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2014-09-26
    相关资源
    最近更新 更多