2013-03-22 2 views
4

В зависимости от значений в векторе «р» Я хочу, чтобы установить значение в другом векторе либо 0, либо 1. Я попробовал следующееНаполните вектор с двоичными значениями, используя IfElse

newvector=rep(0,length(p)) 
newvector=ifelse(p>=0.5,newvector=1,newvector=0) 

Но это бросает ошибка, что IfElse имеет неиспользуемые аргументы

Вектор р

c(0.691401225261269, 0.433129612442971, 0.715983054119369, 0.886747655276408, 
0.768369966075636, 0.619451618025444, 0.747447691612602, 0.787480458130569, 
0.29095065207117, 0.703299386664627, 0.72613890310703, 0.244542050906673, 
0.424358969255879, 0.244542050906673, 0.405127250273614, 0.365573918723265, 
0.277863840689181, 0.656827737910484, 0.762318455515624, 0.839076103987831, 
0.337670440659204, 0.781335609699773, 0.815504546491645, 0.671220524010401 
) 

ответ

8

Не обязательно делать newvector и использовать его в качестве аргумента для ifelse вызывает ошибку.

Попробуйте это ...

newvector <- ifelse(p>=0.5 , 1 , 0) 

Но еще лучше просто сделать это vectorised ...

newvector <- as.integer(p >= 0.5) 
+0

'ifelse' векторизован. – Roland

+1

+1 для второго метода. Вообще избегайте «if ...», когда достаточны прямые векторные операции. –

+1

или '(p> = 0.5) * 1' – Arun

4

Просто используйте:

newvector <- ifelse(p>=0.5,1,0) 

Второй и третий аргументы ifelse - это не выражения, а возвращаемые значения.

+0

dang it Как я мог пропустить это? Thx для ответа, я чувствую себя невероятно глупо сейчас – Rickyfox

+3

Никогда не недооценивайте силу R, чтобы вы чувствовали себя глупо :-) – juba

2

Вы также можете использовать findInterval для этого конкретного случая:

findInterval(p, .5) 
2

в этом случае вы можете использовать newvector<-round(p) вместо ifelse.

+0

До тех пор, пока вы знаете, 'p <1.5' всегда истинно, и это' p> -0.5' истинно. Поэтому будьте осторожны в общем случае :-) –

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