对于if语句的循环

时间:2014-01-21 14:03:13

标签: r loops vectorization

我正在尝试在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]元素,但没有任何作用。我显然错过了一些简单的事情。

任何人都可以建议如何使循环工作,甚至更好,如果有一种简单的方法来矢量化这段代码?

1 个答案:

答案 0 :(得分:4)

您忘记了(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)