Как сделать так, чтобы if возвращал ожидаемый результат (R)?

#r #if-statement

Вопрос:

Есть какие-нибудь идеи о том, как устранить эту ошибку?

 Warning messages:
1: In if (A <0) {:
   the condition has length> 1 and only the first element will be used
2: In if (A> 0) {:
   the condition has length> 1 and only the first element will be used
 
 A <- c (0, -2, -4,1,5)
B <- if (A <0) {A/-2} else if (A> 0) {A/2} else {A = 0}
 

Ошибка:
Результат B должен быть (0,1,2,0,5,2,5).

Комментарии:

1. Пожалуйста, прочтите страницу справки: ?’если’. А потом читать? «Если бы»

Ответ №1:

Ответ на ваш вопрос-использовать ifelse вместо if . ifelse используется для векторов, тогда if как / else используется для скаляров.

 A <- c (0, -2, -4,1,5)
ifelse(A < 0, A/-2, ifelse(A> 0,  A/2, 0))
#[1] 0.0 1.0 2.0 0.5 2.5
 

Однако вам это тоже не нужно ifelse , так как это можно упростить до простого :

 abs(A/2)
#[1] 0.0 1.0 2.0 0.5 2.5
 

Комментарии:

1. Спасибо, я хотел бы понять, почему другой способ не работает. Не могли бы вы объяснить?

2. Я думаю, что да. if используется для скаляров, означающих объекты длиной 1, так length(A) как больше 1, с которыми он здесь не работает if , и, следовательно, вы должны использовать ifelse для таких векторов.