2014-01-21 309 views
0

我试图R中的代码指示变量,是我用一个for循环时,我不应该For循环if语句

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循环的工作,甚至更好,如果有向量化这个代码的简单方法吗?

回答

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) 
+0

MAX()仍回来为0,此代码:( –

+0

真棒,在向量化版本的工作超快。 –

+0

@SimonHayward查看更新。还有一个问题。 –