#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
для таких векторов.