2013-10-15 2 views
0

у меня есть вектор x<-rnorm(100)IfElse с верхними и нижними интервалами

Я хотел бы применить следующее условие:

if any element of x is larger than 2 -> 1. 

if any element of x is smaller than -2 -> -1. 

otherwise keep x. 

Я попытался:

ifelse(x>2,1, ifelse(x<-2,-1),x)) 

но это Безразлично» похоже, работает. что я делаю неправильно?

+1

Ваши скобки неуместны. Все они должны быть в конце. –

+0

Вы имеете в виду: ifelse (x> 2,1, ifelse (x <-2), - 1, x))? это все еще не работает – ghb

+0

Он означает 'ifelse (x> 2, 1, ifelse (x <-2, -1, x)))' – Femaref

ответ

0

Формат заявления ifelse: ifelse(condition, true, false). Вы хотите, чтобы в false положении вашей второй ifelse, поэтому поставить полный ifelse там:

ifelse(x>2, 1, ifelse(x<-2,-1,x))) 
1

Я знаю, что этот ответ был дан ответ, но я думаю, что лучше, чтобы избежать гнездования множественных ifelse() вызовов, если это возможно (хотя два ISN» слишком плохо). Я бы реструктурировал то, что вы делаете, и сказал, что возвратите что-либо в интервале [-2, 2] без изменений, в противном случае верните -1 или 1, если необходимо.

ifelse(x >= -2 & x <= 2, x, sign(x)) 

sign() даст -1 для отрицательных чисел и 1 для позитивов.

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