我正在尝试在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]
元素,但没有任何作用。我显然错过了一些简单的事情。
任何人都可以建议如何使循环工作,甚至更好,如果有一种简单的方法来矢量化这段代码?
答案 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)