2014-01-21 5 views
0

Я пытаюсь кодировать индикаторную переменную в R, да я использую для цикла, когда я неДля контура с, если заявления

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 после выполнения loop, я пробовал различные перестановки этого кода, в том числе напрямую ссылаясь на каждый элемент lch$clickIndicator[i], но ничего не работает. Мне явно не хватает чего-то простого.

Может ли кто-нибудь предложить, как это сделать для цикла, и даже лучше, если есть простой способ векторизовать этот код?

ответ

4

Вы забыли (а) для индексации выходной переменной. Используйте 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

макс() все еще возвращается как 0 с этим кодом :( –

+0

Высокими, то –

+0

@SimonHayward См. обновление. Была еще одна проблема: –

Смежные вопросы